summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Gradzki <mgradzki@cisco.com>2017-05-12 10:55:39 +0200
committerMarek Gradzki <mgradzki@cisco.com>2017-05-15 13:10:50 +0000
commit923dac1cedec9ad7a215d128d54eb77fd85562ae (patch)
tree2312d7401326391b386fe91ebcb7f84c8ade5c7a
parent85790ea6e297ac85036fd96c3a6fb0f8e641ab54 (diff)
HC2VPP-145: fix snat mapping update
Change-Id: I51e8a3e6d62b9c0dacf03d2148b813309fe0dfc4 Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
-rw-r--r--nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizer.java4
-rw-r--r--nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizerTest.java28
-rw-r--r--nat/nat2vpp/src/test/resources/nat/static-mapping-address-update.json12
3 files changed, 37 insertions, 7 deletions
diff --git a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizer.java b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizer.java
index ecffe9ca9..999b8118f 100644
--- a/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizer.java
+++ b/nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizer.java
@@ -107,8 +107,8 @@ final class MappingEntryCustomizer implements ListWriterCustomizer<MappingEntry,
@Nonnull final MappingEntry dataBefore,
@Nonnull final MappingEntry dataAfter,
@Nonnull final WriteContext writeContext) throws WriteFailedException {
- throw new WriteFailedException.UpdateFailedException(id, dataBefore, dataAfter,
- new UnsupportedOperationException("Mapping entry update not supported"));
+ deleteCurrentAttributes(id, dataBefore, writeContext);
+ writeCurrentAttributes(id, dataAfter, writeContext);
}
@Override
diff --git a/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizerTest.java b/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizerTest.java
index 649284a44..1d5eff7f3 100644
--- a/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizerTest.java
+++ b/nat/nat2vpp/src/test/java/io/fd/hc2vpp/nat/write/MappingEntryCustomizerTest.java
@@ -17,7 +17,6 @@
package io.fd.hc2vpp.nat.write;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -83,10 +82,17 @@ public class MappingEntryCustomizerTest extends WriterCustomizerTest implements
customizer.writeCurrentAttributes(IID, extractMappingEntry(data), writeContext);
}
- @Test(expected = WriteFailedException.UpdateFailedException.class)
- public void testUpdate() throws WriteFailedException {
- final MappingEntry data = mock(MappingEntry.class);
- customizer.updateCurrentAttributes(IID, data, data, writeContext);
+ @Test
+ public void testUpdate(
+ @InjectTestData(resourcePath = "/nat/static-mapping.json", id = MAPPING_TABLE_PATH) MappingTable before,
+ @InjectTestData(resourcePath = "/nat/static-mapping-address-update.json", id = MAPPING_TABLE_PATH) MappingTable after)
+ throws WriteFailedException {
+ customizer.updateCurrentAttributes(IID, extractMappingEntry(before), extractMappingEntry(after), writeContext);
+ final SnatAddStaticMapping expectedDeleteRequest = getExpectedRequest();
+ verify(jvppSnat).snatAddStaticMapping(expectedDeleteRequest);
+ final SnatAddStaticMapping expectedUpdateRequest = getExpectedUpdateRequest();
+ expectedUpdateRequest.isAdd = 1;
+ verify(jvppSnat).snatAddStaticMapping(expectedUpdateRequest);
}
@Test
@@ -113,4 +119,16 @@ public class MappingEntryCustomizerTest extends WriterCustomizerTest implements
expectedRequest.externalIpAddress = new byte[] {45, 1, 5, 7};
return expectedRequest;
}
+
+ private static SnatAddStaticMapping getExpectedUpdateRequest() {
+ final SnatAddStaticMapping expectedRequest = new SnatAddStaticMapping();
+ expectedRequest.isIp4 = 1;
+ expectedRequest.addrOnly = 1;
+ expectedRequest.protocol = 17; // udp
+ expectedRequest.vrfId = (int) NAT_INSTANCE_ID;
+ expectedRequest.externalSwIfIndex = -1;
+ expectedRequest.localIpAddress = new byte[] {(byte) 192, (byte) 168, 1, 86};
+ expectedRequest.externalIpAddress = new byte[] {45, 1, 5, 6};
+ return expectedRequest;
+ }
} \ No newline at end of file
diff --git a/nat/nat2vpp/src/test/resources/nat/static-mapping-address-update.json b/nat/nat2vpp/src/test/resources/nat/static-mapping-address-update.json
new file mode 100644
index 000000000..224a62a6b
--- /dev/null
+++ b/nat/nat2vpp/src/test/resources/nat/static-mapping-address-update.json
@@ -0,0 +1,12 @@
+{
+ "mapping-table" : {
+ "mapping-entry": {
+ "index": 22,
+ "type": "static",
+ "transport-protocol": 17,
+ "internal-src-address": "192.168.1.86",
+ "external-src-address": "45.1.5.6"
+ }
+ }
+}
+