Jonathan Hart | 6df9017 | 2014-04-03 10:13:11 -0700 | [diff] [blame] | 1 | package net.onrc.onos.core.datastore.topology; |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 2 | |
Jonathan Hart | a88fd24 | 2014-04-03 11:24:54 -0700 | [diff] [blame] | 3 | import static org.junit.Assert.assertArrayEquals; |
| 4 | import static org.junit.Assert.assertEquals; |
| 5 | import static org.junit.Assert.assertNotEquals; |
| 6 | import static org.junit.Assert.assertNotNull; |
| 7 | import static org.junit.Assert.fail; |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 8 | |
| 9 | import java.util.HashMap; |
| 10 | import java.util.Map; |
| 11 | |
Jonathan Hart | 6df9017 | 2014-04-03 10:13:11 -0700 | [diff] [blame] | 12 | import net.onrc.onos.core.datastore.DataStoreClient; |
| 13 | import net.onrc.onos.core.datastore.IKVTable; |
| 14 | import net.onrc.onos.core.datastore.ObjectDoesntExistException; |
| 15 | import net.onrc.onos.core.datastore.ObjectExistsException; |
| 16 | import net.onrc.onos.core.datastore.WrongVersionException; |
Jonathan Hart | 6df9017 | 2014-04-03 10:13:11 -0700 | [diff] [blame] | 17 | import net.onrc.onos.core.datastore.topology.KVSwitch.STATUS; |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 18 | |
| 19 | import org.junit.After; |
| 20 | import org.junit.Before; |
| 21 | import org.junit.Test; |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 22 | import org.slf4j.Logger; |
| 23 | import org.slf4j.LoggerFactory; |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 24 | |
| 25 | public class KVSwitchTest { |
Yuta HIGUCHI | ceb21b6 | 2014-04-17 15:46:05 -0700 | [diff] [blame] | 26 | |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 27 | private static final Logger log = LoggerFactory.getLogger(KVSwitchTest.class); |
| 28 | |
Yuta HIGUCHI | ceb21b6 | 2014-04-17 15:46:05 -0700 | [diff] [blame] | 29 | static { |
| 30 | // configuration to quickly fall back to instance mode for faster test run |
| 31 | System.setProperty("net.onrc.onos.core.datastore.hazelcast.client.attemptLimit", "0"); |
| 32 | } |
| 33 | |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 34 | IKVTable switchTable; |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 35 | static final Long DPID1 = 0x1L; |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 36 | KVSwitch sw1; |
| 37 | |
| 38 | @Before |
| 39 | public void setUp() throws Exception { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 40 | switchTable = DataStoreClient.getClient().getTable(KVSwitch.GLOBAL_SWITCH_TABLE_NAME); |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 41 | sw1 = new KVSwitch(DPID1); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 42 | } |
| 43 | |
| 44 | @After |
| 45 | public void tearDown() throws Exception { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 46 | DataStoreClient.getClient().dropTable(switchTable); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 47 | } |
| 48 | |
| 49 | public KVSwitch assertSwitchInDataStore(final Long dpid, final STATUS status) { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 50 | try { |
| 51 | final KVSwitch sw = new KVSwitch(dpid); |
| 52 | sw.read(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 53 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion()); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 54 | assertEquals(dpid, sw.getDpid()); |
| 55 | assertEquals(status, sw.getStatus()); |
| 56 | return sw; |
| 57 | } catch (ObjectDoesntExistException e) { |
| 58 | fail("Switch was not written to datastore"); |
| 59 | } |
| 60 | return null; |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 61 | } |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 62 | |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 63 | public void assertSwitchNotInDataStore(final Long dpid) { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 64 | final KVSwitch sw = new KVSwitch(dpid); |
| 65 | try { |
| 66 | sw.read(); |
| 67 | fail("Switch was not supposed to be there in datastore"); |
| 68 | } catch (ObjectDoesntExistException e) { |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 69 | log.debug("Exception thrown as expected", e); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 70 | } |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 71 | } |
| 72 | |
| 73 | @Test |
| 74 | public void testGetAllSwitches() throws ObjectExistsException { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 75 | final int NUM_SWITCHES = 100; |
| 76 | Map<Long, KVSwitch> expected = new HashMap<>(); |
| 77 | for (long dpid = 1; dpid <= NUM_SWITCHES; ++dpid) { |
| 78 | KVSwitch sw = new KVSwitch(dpid); |
| 79 | sw.setStatus(STATUS.ACTIVE); |
| 80 | sw.create(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 81 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion()); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 82 | expected.put(sw.getDpid(), sw); |
| 83 | } |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 84 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 85 | Iterable<KVSwitch> switches = KVSwitch.getAllSwitches(); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 86 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 87 | for (KVSwitch sw : switches) { |
| 88 | KVSwitch expectedSw = expected.get(sw.getDpid()); |
| 89 | assertNotNull(expectedSw); |
| 90 | assertEquals(expectedSw.getDpid(), sw.getDpid()); |
| 91 | assertEquals(expectedSw.getStatus(), sw.getStatus()); |
| 92 | assertEquals(expectedSw.getVersion(), sw.getVersion()); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 93 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 94 | assertArrayEquals(expectedSw.getKey(), sw.getKey()); |
| 95 | } |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 96 | } |
| 97 | |
| 98 | @Test |
| 99 | public void testCreate() throws ObjectExistsException { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 100 | sw1.setStatus(STATUS.ACTIVE); |
| 101 | sw1.create(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 102 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion()); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 103 | |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 104 | assertEquals(DPID1, sw1.getDpid()); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 105 | assertEquals(STATUS.ACTIVE, sw1.getStatus()); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 106 | |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 107 | assertSwitchInDataStore(DPID1, STATUS.ACTIVE); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 108 | } |
| 109 | |
| 110 | @Test(expected = ObjectExistsException.class) |
| 111 | public void testCreateFailAlreadyExist() throws ObjectExistsException { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 112 | // setup pre-existing Switch |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 113 | KVSwitch sw = new KVSwitch(DPID1); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 114 | sw.forceCreate(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 115 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion()); |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 116 | assertSwitchInDataStore(DPID1, STATUS.INACTIVE); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 117 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 118 | sw1.setStatus(STATUS.ACTIVE); |
| 119 | sw1.create(); |
| 120 | fail("Should have thrown an exception"); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 121 | } |
| 122 | |
| 123 | @Test |
| 124 | public void testForceCreate() { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 125 | // setup pre-existing Switch |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 126 | KVSwitch sw = new KVSwitch(DPID1); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 127 | sw.forceCreate(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 128 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion()); |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 129 | assertSwitchInDataStore(DPID1, STATUS.INACTIVE); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 130 | |
| 131 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 132 | sw1.setStatus(STATUS.ACTIVE); |
| 133 | sw1.forceCreate(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 134 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion()); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 135 | |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 136 | assertEquals(DPID1, sw1.getDpid()); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 137 | assertEquals(STATUS.ACTIVE, sw1.getStatus()); |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 138 | assertSwitchInDataStore(DPID1, STATUS.ACTIVE); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 139 | } |
| 140 | |
| 141 | @Test |
| 142 | public void testRead() throws ObjectDoesntExistException { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 143 | // setup pre-existing Switch |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 144 | KVSwitch sw = new KVSwitch(DPID1); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 145 | sw.setStatus(STATUS.ACTIVE); |
| 146 | sw.forceCreate(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 147 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion()); |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 148 | assertSwitchInDataStore(DPID1, STATUS.ACTIVE); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 149 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 150 | sw1.read(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 151 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion()); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 152 | assertEquals(sw.getVersion(), sw1.getVersion()); |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 153 | assertEquals(DPID1, sw1.getDpid()); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 154 | assertEquals(STATUS.ACTIVE, sw1.getStatus()); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 155 | } |
| 156 | |
| 157 | @Test(expected = ObjectDoesntExistException.class) |
| 158 | public void testReadFailNoExist() throws ObjectDoesntExistException { |
| 159 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 160 | sw1.read(); |
| 161 | fail("Should have thrown an exception"); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 162 | } |
| 163 | |
| 164 | @Test |
| 165 | public void testUpdate() throws ObjectDoesntExistException, WrongVersionException { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 166 | // setup pre-existing Switch |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 167 | KVSwitch sw = new KVSwitch(DPID1); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 168 | sw.setStatus(STATUS.ACTIVE); |
| 169 | sw.forceCreate(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 170 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion()); |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 171 | assertSwitchInDataStore(DPID1, STATUS.ACTIVE); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 172 | |
| 173 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 174 | sw1.read(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 175 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion()); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 176 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 177 | sw1.setStatus(STATUS.INACTIVE); |
| 178 | sw1.update(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 179 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion()); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 180 | assertNotEquals(sw.getVersion(), sw1.getVersion()); |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 181 | assertEquals(DPID1, sw1.getDpid()); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 182 | assertEquals(STATUS.INACTIVE, sw1.getStatus()); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 183 | } |
| 184 | |
| 185 | @Test |
| 186 | public void testDelete() throws ObjectDoesntExistException, WrongVersionException { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 187 | // setup pre-existing Switch |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 188 | KVSwitch sw = new KVSwitch(DPID1); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 189 | sw.setStatus(STATUS.ACTIVE); |
| 190 | sw.forceCreate(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 191 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion()); |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 192 | assertSwitchInDataStore(DPID1, STATUS.ACTIVE); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 193 | |
| 194 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 195 | try { |
| 196 | sw1.read(); |
| 197 | } catch (ObjectDoesntExistException e) { |
| 198 | fail("Failed reading switch to delete"); |
| 199 | } |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 200 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion()); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 201 | sw1.delete(); |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 202 | assertSwitchNotInDataStore(DPID1); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 203 | } |
| 204 | |
| 205 | @Test |
| 206 | public void testForceDelete() { |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 207 | // setup pre-existing Switch |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 208 | KVSwitch sw = new KVSwitch(DPID1); |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 209 | sw.setStatus(STATUS.ACTIVE); |
| 210 | sw.forceCreate(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 211 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw.getVersion()); |
Yuta HIGUCHI | 44a0b35 | 2014-05-14 21:32:48 -0700 | [diff] [blame^] | 212 | assertSwitchInDataStore(DPID1, STATUS.ACTIVE); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 213 | |
| 214 | |
Ray Milkey | 269ffb9 | 2014-04-03 14:43:30 -0700 | [diff] [blame] | 215 | sw1.forceDelete(); |
Ray Milkey | 7531a34 | 2014-04-11 15:08:12 -0700 | [diff] [blame] | 216 | assertNotEquals(DataStoreClient.getClient().getVersionNonexistant(), sw1.getVersion()); |
Yuta HIGUCHI | 6a64313 | 2014-03-18 22:39:27 -0700 | [diff] [blame] | 217 | } |
| 218 | |
| 219 | } |