Sent from my HTC
----- Reply message ----- From: "Alex Huang" <alex.hu...@citrix.com> To: "dev@cloudstack.apache.org" <dev@cloudstack.apache.org> Subject: master build breaks at com.cloud.vpc.NetworkACLServiceTest Date: Wed, May 29, 2013 21:50 Daan, I'm new to mockito as well and I haven't had time to really look at what the right patterns are. In general, in my dealings with other mocking frameworks, I have never liked having the mocking framework returning a default value. I've always like the mocking framework to throw an exception if the method being access was not explicitly set. Not sure if that can be a setting in mockito. Thanks. --Alex > -----Original Message----- > From: Daan Hoogland [mailto:dhoogl...@schubergphilis.com] > Sent: Wednesday, May 29, 2013 8:58 AM > To: 'dev@cloudstack.apache.org' > Subject: RE: master build breaks at com.cloud.vpc.NetworkACLServiceTest > > Alex, > > Thanks for the mockito lesson. I think a lot of us are now going to improve > their tests. > Can one make mockito forget the when-conditions? I would intuitively say > MockitoAnnotations.initMocks(this); would do this. > > Alternative to the answer to that last question would be to follow the > javadoc for when: > //you can set different behavior for consecutive method calls. > //Last stubbing (e.g: thenReturn("foo")) determines the behavior of further > consecutive calls. > when(mock.someMethod("some arg")) > .thenThrow(new RuntimeException()) > .thenReturn("foo"); > > //Alternative, shorter version for consecutive stubbing: > when(mock.someMethod("some arg")) > .thenReturn("one", "two"); > //is the same as: > when(mock.someMethod("some arg")) > .thenReturn("one") > .thenReturn("two"); > > Regards, > Daan (not new to unit-tests sec but to mockito though) Hoogland > > -----Original Message----- > From: Alex Huang [mailto:alex.hu...@citrix.com] > Sent: woensdag 29 mei 2013 16:34 > To: Kishan Kavala; dev@cloudstack.apache.org > Subject: RE: master build breaks at com.cloud.vpc.NetworkACLServiceTest > > Kishan, > > The problem is caused by these two methods. I hope everyone reads this > because I know some of us are new to writing unit tests. The problem is > basically as I described in a previous email. In here, both tests makes use > of > and shares of the _networkACLItemDao and the mock is shared because the > DAO is a singleton and is injected. Now, note that testCreateACLItem() > invokes the method findByAclAndNumber() via the _networkAclMgr but it > didn't specifically mock the return value of the method in the test. If this > test > is ran before testCreateACLItemDuplicateNumber(), then it will be successful > because by default mocks return null. However, > testCreateACLItemDuplicateNumber() mocks findByAclAndNumber() to > return a value, so if testCreateACLItem() is ran after > testCreateACLItemDuplicateNumber(), the test will fail because a value is > returned and the condition inside _networkAclMgr will fire just as Daan > found it. > > I was hoping maven prints out the order of the tests, but from Daan's log, it > only printed out the order of the bigger test suite so it's not helpful. > However, it's not too hard to find. Just go to the code with the error, check > the method that fails and go back to the test and see if your test mocked that > method and if it didn't, was it mocked by any other tests. > > @Test > public void testCreateACLItem() throws Exception { > Mockito.when(_vpcMgr.getVpc(Mockito.anyLong())).thenReturn(new > VpcVO()); > > Mockito.when(_networkAclMgr.getNetworkACL(Mockito.anyLong())).thenR > eturn(acl); > > Mockito.when(_networkAclMgr.createNetworkACLItem(Mockito.anyInt(), > Mockito.anyInt(), Mockito.anyString(), Mockito.anyList(), Mockito.anyInt(), > Mockito.anyInt(), > Mockito.any(NetworkACLItem.TrafficType.class), > Mockito.anyLong(), > Mockito.anyString(), Mockito.anyInt())).thenReturn(new > NetworkACLItemVO()); > assertNotNull(_aclService.createNetworkACLItem(createACLItemCmd)); > } > > @Test(expected = InvalidParameterValueException.class) > public void testCreateACLItemDuplicateNumber() throws Exception { > Mockito.when(_vpcMgr.getVpc(Mockito.anyLong())).thenReturn(new > VpcVO()); > > Mockito.when(_networkAclMgr.getNetworkACL(Mockito.anyLong())).thenR > eturn(acl); > > Mockito.when(_networkACLItemDao.findByAclAndNumber(Mockito.anyLon > g(), Mockito.anyInt())).thenReturn(new NetworkACLItemVO()); > _aclService.createNetworkACLItem(createACLItemCmd); > } > > > -----Original Message----- > > From: Kishan Kavala > > Sent: Wednesday, May 29, 2013 4:48 AM > > To: dev@cloudstack.apache.org > > Cc: Alex Huang > > Subject: RE: master build breaks at > > com.cloud.vpc.NetworkACLServiceTest > > > > Daan, > > I mocked the method causing the failure (I couldn't replicate the > > error you are seeing though). Please check with latest master and let > > us know if you still see issues. > > > > ~kishan > > ________________________________________ > > From: Daan Hoogland [dhoogl...@schubergphilis.com] > > Sent: Wednesday, May 29, 2013 1:49 PM > > To: dev@cloudstack.apache.org > > Cc: Alex Huang > > Subject: RE: master build breaks at > > com.cloud.vpc.NetworkACLServiceTest > > > > H, > > > > I hope this is what Alex means the test programmer needs. > > > > The order that is reported is as follows (I included the server test run > > only): > > ------------------------------------------------------- > > T E S T S > > ------------------------------------------------------- > > Running com.cloud.alert.AlertControlsUnitTest > > log4j:WARN No appenders could be found for logger > > (com.cloud.alert.AlertControlsUnitTest). > > log4j:WARN Please initialize the log4j system properly. > > log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig > > for more info. > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.546 > > sec Running com.cloud.capacity.CapacityManagerTest > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.11 > > sec Running com.cloud.configuration.ConfigurationManagerTest > > Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.499 > > sec Running com.cloud.configuration.ValidateIpRangeTest > > Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 > > sec Running com.cloud.event.EventControlsUnitTest > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec > > Running com.cloud.keystore.KeystoreTest > > org.apache.cloudstack.api.response.UserVmResponse/null/{"id":"3","secu > > rit ygroup":[],"nic":[],"tags":[],"affinitygroup":[]} > > org.apache.cloudstack.api.response.AlertResponse/null/{"id":"100","des > > crip > > tion":"Hello"} > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.109 > > sec Running com.cloud.metadata.ResourceMetaDataManagerTest > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 > > sec Running com.cloud.network.CreatePrivateNetworkTest > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec > > Running com.cloud.network.dao.NetworkDaoTest > > Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec > > Running com.cloud.network.DedicateGuestVlanRangesTest > > Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 > > sec Running com.cloud.network.firewall.FirewallManagerTest > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec > > Running com.cloud.network.NetworkManagerTest > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0 sec > > Running com.cloud.network.NetworkModelTest > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec > > Running com.cloud.network.security.SecurityGroupQueueTest > > Num Vms= 50 Queue size = 50 > > Num Vms= 20000 Queue size = 20000 time=827 ms Num Vms= 5000 Queue > size > > = 5000 time=2544 ms Num Vms= 1 Queue size = 1 time=0 ms Num Vms= > > 1000000 Queue size = 1000000 time=1171 ms Num Vms= 1 Queue size = 1 > > time=1140 ms Total jobs dequeued = 10, num queued=1010 queue current > > size=1000 Total jobs dequeued = 10, num queued=1008 queue current > > size=998 Total jobs dequeued = 1, num queued=1001 queue current > > size=1000 Total jobs dequeued = 10, num queued=1000 queue current > > size=990 Total jobs dequeued = 10, num queued=10 queue current size=0 > > Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.745 > > sec Running com.cloud.network.UpdatePhysicalNetworkTest > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.312 > > sec Running com.cloud.resourcelimit.ResourceLimitManagerImplTest > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec > > Running com.cloud.vm.DeploymentPlanningManagerImplTest > > Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.713 > > sec Running com.cloud.vm.snapshot.VMSnapshotManagerTest > > Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.203 > > sec Running com.cloud.vm.UserVmManagerTest Tests run: 10, Failures: 0, > > Errors: 0, > > Skipped: 0, Time elapsed: 0.64 sec Running > > com.cloud.vm.VirtualMachineManagerImplTest > > Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.297 > > sec Running com.cloud.vpc.NetworkACLManagerTest > > Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.406 > > sec Running com.cloud.vpc.NetworkACLServiceTest > > Tests run: 5, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.203 > > sec <<< FAILURE! > > Running com.cloud.vpc.Site2SiteVpnTest Tests run: 1, Failures: 0, > > Errors: 0, Skipped: 0, Time elapsed: 5.491 sec Running > > com.cloud.vpc.VpcTest Tests run: 1, Failures: 0, Errors: 0, Skipped: > > 0, Time > > elapsed: 0.235 sec Running > > org.apache.cloudstack.affinity.AffinityApiUnitTest > > Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.188 > > sec Running org.apache.cloudstack.lb.ApplicationLoadBalancerTest > > Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.249 > > sec Running > > org.apache.cloudstack.networkoffering.CreateNetworkOfferingTest > > Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.817 > > sec Running org.apache.cloudstack.privategw.AclOnPrivateGwTest > > Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.11 > > sec Running > > org.apache.cloudstack.region.gslb.GlobalLoadBalancingRulesServiceImplT > > est Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: > > 0.032 sec Running org.apache.cloudstack.region.RegionManagerTest > > Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec > > > > Results : > > > > Tests in error: > > testCreateACLItem(com.cloud.vpc.NetworkACLServiceTest): ACL item > > with number 1 already exists in ACL: null > > > > -----Original Message----- > > From: Pranav Saxena [mailto:pranav.sax...@citrix.com] > > Sent: woensdag 29 mei 2013 5:58 > > To: dev@cloudstack.apache.org > > Cc: Alex Huang > > Subject: RE: master build breaks at > > com.cloud.vpc.NetworkACLServiceTest > > > > Thanks Alex for throwing some light on this . I have myself seen this > > when one of the intenalLb tests were failing on my machine and few > > others but compiling successfully on Alena's machine but that time I > > also didn't know how this could have happened and I ended up reporting > > this to her and then after probably some amendments , unit tests compiled > on all the machines. > > > > -----Original Message----- > > From: Alex Huang [mailto:alex.hu...@citrix.com] > > Sent: Wednesday, May 29, 2013 12:05 AM > > To: dev@cloudstack.apache.org > > Subject: RE: master build breaks at > > com.cloud.vpc.NetworkACLServiceTest > > > > Unit tests are ran in random order because each unit test should be > > self- sufficient. I'm saying I've seen cases where unit tests aren't > > written to be self-sufficient and that's why an unit test fails > > sometimes and passes sometimes. > > > > In those cases, we should fix the unit test and not the order. A > > common problem is sharing the mocked classes. For example, unit test > > A tests the set of a mock object and unit test B tests if the field is > > null but they shared the mock instance. In this case, unit test B > > passes if it is ran before unit test A but fails if it was ran after. > > > > But often times the randomness of how it's ran is actually > > pseudo-random so it works consistently on someone's laptop but as soon > > as it gets ran on another machine, the order changes and it fails. So > > when you see the problem such as this, you should always let the unit > > test writer know the order in which the unit tests were executed so > > that the unit test writer can try it. > > > > --Alex > > > > > -----Original Message----- > > > From: Daan Hoogland [mailto:dhoogl...@schubergphilis.com] > > > Sent: Monday, May 27, 2013 9:23 AM > > > To: dev@cloudstack.apache.org > > > Subject: RE: master build breaks at > > > com.cloud.vpc.NetworkACLServiceTest > > > > > > And if not how do I manipulate the order of tests? > > > > > > -----Original Message----- > > > From: Daan Hoogland [mailto:dhoogl...@schubergphilis.com] > > > Sent: maandag 27 mei 2013 17:02 > > > To: dev@cloudstack.apache.org > > > Subject: RE: master build breaks at > > > com.cloud.vpc.NetworkACLServiceTest > > > > > > Alex, > > > > > > Can this change out of the box? I had the problem on a clean > > > checkout of master. > > > > > > -----Original Message----- > > > From: Alex Huang [mailto:alex.hu...@citrix.com] > > > Sent: maandag 27 mei 2013 15:55 > > > To: dev@cloudstack.apache.org > > > Subject: RE: master build breaks at > > > com.cloud.vpc.NetworkACLServiceTest > > > > > > Daan, > > > > > > The other possibility is that the test is affected by another test > > > so that it breaks when the tests are in a certain order. Have you > > > noticed what's the order of the tests ran when it breaks? > > > > > > --Alex > > > > > > > -----Original Message----- > > > > From: Daan Hoogland [mailto:dhoogl...@schubergphilis.com] > > > > Sent: Monday, May 27, 2013 2:37 AM > > > > To: dev@cloudstack.apache.org > > > > Subject: RE: master build breaks at > > > > com.cloud.vpc.NetworkACLServiceTest > > > > > > > > Being in the habit of replying on my own mails as I seems to be on > > > > this list; > > > > > > > > This seems to be related to eclipse refresh/build code. Does > > > > anybody have a solution to it? The problem is not consistently > > > > present but all the more irritating. > > > > > > > > Regards, > > > > > > > > -----Original Message----- > > > > From: Daan Hoogland [mailto:dhoogl...@schubergphilis.com] > > > > Sent: maandag 27 mei 2013 7:49 > > > > To: dev@cloudstack.apache.org > > > > Subject: master build breaks at > > > > com.cloud.vpc.NetworkACLServiceTest > > > > > > > > LS, > > > > > > > > Lately I've been getting, > > > > "com.cloud.exception.InvalidParameterValueException: ACL item with > > > > number 1 already exists in ACL: null", while building cloudstack. > > > > I first thought it was my own hack so I don't know when it was > > > > introduced (it is in a clean master that it happens). The full > > > > surfire report > > > follows: > > > > > > > > ------------------------------------------------------------------ > > > > -- > > > > -- > > > > --------- Test set: com.cloud.vpc.NetworkACLServiceTest > > > > ------------------------------------------------------------------ > > > > -- > > > > -- > > > > --------- Tests run: 5, Failures: 0, Errors: 1, Skipped: 0, Time > > > > elapsed: 0.219 sec <<< FAILURE! > > > > testCreateACLItem(com.cloud.vpc.NetworkACLServiceTest) Time > > elapsed: > > > > 0.016 sec <<< ERROR! > > > > com.cloud.exception.InvalidParameterValueException: ACL item with > > > > number 1 already exists in ACL: null > > > > at > > > > > > > > > > com.cloud.network.vpc.NetworkACLServiceImpl.createNetworkACLItem(Ne > > > > tworkACLServiceImpl.java:270) > > > > at > > > > > > > > > > com.cloud.vpc.NetworkACLServiceTest.testCreateACLItem(NetworkACLServ > > > > iceTest.java:141) > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > > > > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown > Source) > > > > at > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown > > > > Source) > > > > at java.lang.reflect.Method.invoke(Unknown Source) > > > > at > > > > > > > > > > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(Framework > > > > Method.java:45) > > > > at > > > > org.junit.internal.runners.model.ReflectiveCallable.run(Reflective > > > > Ca > > > > ll > > > > able.jav > > > > a:15) > > > > at > > > > > > org.junit.runners.model.FrameworkMethod.invokeExplosively(Framework > > > > Method.java:42) > > > > at > > > > > > > > > > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMeth > > > > od.java:20) > > > > at > > > > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefor > > > > es > > > > .j > > > > ava > > > > :28) > > > > at > > > > > > > > > > org.springframework.test.context.junit4.statements.RunBeforeTestMethod > > > > Callbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) > > > > at > > > > > > > > > > org.springframework.test.context.junit4.statements.RunAfterTestMethodC > > > > allbacks.evaluate(RunAfterTestMethodCallbacks.java:83) > > > > at > > > > org.springframework.test.context.junit4.statements.SpringRepeat.ev > > > > al > > > > ua > > > > te( > > > > SpringRepeat.java:72) > > > > at > > > > org.springframework.test.context.junit4.SpringJUnit4ClassRunner.ru > > > > nC > > > > hi > > > > ld(S > > > > pringJUnit4ClassRunner.java:231) > > > > at > > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4Class > > > > Ru > > > > nn > > > > er.j > > > > ava:47) > > > > at > > > > org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) > > > > at > > org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) > > > > at > > > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) > > > > at > > org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) > > > > at > > > org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) > > > > at > > > > org.springframework.test.context.junit4.statements.RunBeforeTestCl > > > > as > > > > sC > > > > all > > > > backs.evaluate(RunBeforeTestClassCallbacks.java:61) > > > > at > > > > org.springframework.test.context.junit4.statements.RunAfterTestCla > > > > ss > > > > Ca > > > > llb > > > > acks.evaluate(RunAfterTestClassCallbacks.java:71) > > > > at org.junit.runners.ParentRunner.run(ParentRunner.java:300) > > > > at > > > > org.springframework.test.context.junit4.SpringJUnit4ClassRunner.ru > > > > n( > > > > Sp > > > > ring > > > > JUnit4ClassRunner.java:174) > > > > at > > > > org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Prov > > > > id > > > > er > > > > .jav > > > > a:236) > > > > at > > > > org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUn > > > > it > > > > 4P > > > > rov > > > > ider.java:134) > > > > at > > > > > org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider. > > > > java > > > > :113) > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > > > > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown > Source) > > > > at > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown > > > > Source) > > > > at java.lang.reflect.Method.invoke(Unknown Source) > > > > at > > > > org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArr > > > > ay > > > > (R > > > > efl > > > > ectionUtils.java:189) > > > > at > > > > org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.inv > > > > ok > > > > e( > > > > Pr > > > > oviderFactory.java:165) > > > > at > > > > org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(Pr > > > > ov > > > > id > > > > er > > > > Factory.java:85) > > > > at > > > > > > > > > > org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(Forke > > > > d > > > > Booter.java:103) > > > > at > > > > > > > > > > org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:7 > > > > 4)