/* * $Id$ * * Janus platform is an open-source multiagent platform. * More details on http://www.janusproject.io * * Copyright (C) 2014-2015 Sebastian RODRIGUEZ, Nicolas GAUD, Stéphane GALLAND. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.janusproject.tests.kernel.services.hazelcast; import static org.junit.Assert.assertNotNull; import java.util.Comparator; import java.util.UUID; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IMap; import com.hazelcast.core.MultiMap; import io.janusproject.kernel.services.hazelcast.HazelcastDistributedDataStructureService; import io.janusproject.services.distributeddata.DMap; import io.janusproject.services.distributeddata.DMultiMap; import io.janusproject.services.distributeddata.DistributedDataStructureService; import io.janusproject.tests.testutils.AbstractDependentServiceTest; import io.janusproject.tests.testutils.StartServiceForTest; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import io.sarl.tests.api.Nullable; /** * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ @SuppressWarnings("all") @StartServiceForTest(startAfterSetUp = true) public class HazelcastDistributedDataStructureFactoryTest extends AbstractDependentServiceTest<HazelcastDistributedDataStructureService> { @Nullable private HazelcastInstance hz; @Nullable private IMap<Object, Object> imap; @Nullable private MultiMap<Object, Object> multimap; @Nullable private HazelcastDistributedDataStructureService factory; public HazelcastDistributedDataStructureFactoryTest() { super(DistributedDataStructureService.class); } @Override public HazelcastDistributedDataStructureService newService() { return new HazelcastDistributedDataStructureService(); } @Before public void setUp() throws Exception { this.imap = Mockito.mock(IMap.class); this.multimap = Mockito.mock(com.hazelcast.core.MultiMap.class); this.hz = Mockito.mock(HazelcastInstance.class); Mockito.when(this.hz.getMap(Mockito.any())).thenReturn(this.imap); Mockito.when(this.hz.getMultiMap(Mockito.any())).thenReturn(this.multimap); this.factory = new HazelcastDistributedDataStructureService(); this.reflect.invoke(this.factory, "setHazelcastInstance", this.hz); } @Override public void getServiceDependencies() { assertContains(this.service.getServiceDependencies()); } @Override public void getServiceWeakDependencies() { assertContains(this.service.getServiceWeakDependencies()); } @Test public void getMap() { DMap<Object, Object> m = this.factory.getMap(UUID.randomUUID().toString()); assertNotNull(m); m.put("a", "b"); //$NON-NLS-1$//$NON-NLS-2$ ArgumentCaptor<Object> argument1 = ArgumentCaptor.forClass(Object.class); ArgumentCaptor<Object> argument2 = ArgumentCaptor.forClass(Object.class); Mockito.verify(this.imap).put(argument1.capture(), argument2.capture()); assertEquals("a", argument1.getValue()); //$NON-NLS-1$ assertEquals("b", argument2.getValue()); //$NON-NLS-1$ } @Test public void getMultiMap() { DMultiMap<Object, Object> m = this.factory.getMultiMap(UUID.randomUUID().toString()); m.put("a", "b"); //$NON-NLS-1$//$NON-NLS-2$ ArgumentCaptor<Object> argument1 = ArgumentCaptor.forClass(Object.class); ArgumentCaptor<Object> argument2 = ArgumentCaptor.forClass(Object.class); Mockito.verify(this.multimap).put(argument1.capture(), argument2.capture()); assertEquals("a", argument1.getValue()); //$NON-NLS-1$ assertEquals("b", argument2.getValue()); //$NON-NLS-1$ } @Test public void getMapComparator_null() { DMap<Object, Object> m = this.factory.getMap(UUID.randomUUID().toString(), null); assertNotNull(m); m.put("a", "b"); //$NON-NLS-1$//$NON-NLS-2$ ArgumentCaptor<Object> argument1 = ArgumentCaptor.forClass(Object.class); ArgumentCaptor<Object> argument2 = ArgumentCaptor.forClass(Object.class); Mockito.verify(this.imap).put(argument1.capture(), argument2.capture()); assertEquals("a", argument1.getValue()); //$NON-NLS-1$ assertEquals("b", argument2.getValue()); //$NON-NLS-1$ } @Test public void getMultiMapComparator_null() { DMultiMap<Object, Object> m = this.factory.getMultiMap(UUID.randomUUID().toString(), null); m.put("a", "b"); //$NON-NLS-1$//$NON-NLS-2$ ArgumentCaptor<Object> argument1 = ArgumentCaptor.forClass(Object.class); ArgumentCaptor<Object> argument2 = ArgumentCaptor.forClass(Object.class); Mockito.verify(this.multimap).put(argument1.capture(), argument2.capture()); assertEquals("a", argument1.getValue()); //$NON-NLS-1$ assertEquals("b", argument2.getValue()); //$NON-NLS-1$ } @Test public void getMapComparator_notNull() { DMap<Object, Object> m = this.factory.getMap(UUID.randomUUID().toString(), new ComparableComparator()); assertNotNull(m); m.put("a", "b"); //$NON-NLS-1$//$NON-NLS-2$ ArgumentCaptor<Object> argument1 = ArgumentCaptor.forClass(Object.class); ArgumentCaptor<Object> argument2 = ArgumentCaptor.forClass(Object.class); Mockito.verify(this.imap).put(argument1.capture(), argument2.capture()); assertEquals("a", argument1.getValue()); //$NON-NLS-1$ assertEquals("b", argument2.getValue()); //$NON-NLS-1$ } @Test public void getMultiMapComparator_notNull() { DMultiMap<Object, Object> m = this.factory.getMultiMap(UUID.randomUUID().toString(), new ComparableComparator()); m.put("a", "b"); //$NON-NLS-1$//$NON-NLS-2$ ArgumentCaptor<Object> argument1 = ArgumentCaptor.forClass(Object.class); ArgumentCaptor<Object> argument2 = ArgumentCaptor.forClass(Object.class); Mockito.verify(this.multimap).put(argument1.capture(), argument2.capture()); assertEquals("a", argument1.getValue()); //$NON-NLS-1$ assertEquals("b", argument2.getValue()); //$NON-NLS-1$ } /** * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ private static class ComparableComparator implements Comparator<Object> { public ComparableComparator() { // } @Override public int compare(Object o1, Object o2) { return System.identityHashCode(o1) - System.identityHashCode(o2); } } }