This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new 86f75e1a1d SNMPv3 test coverage 86f75e1a1d is described below commit 86f75e1a1d96208939f20de5122a2927c8bcc23b Author: JiriOndrusek <ondrusek.j...@gmail.com> AuthorDate: Wed Jul 26 13:43:16 2023 +0200 SNMPv3 test coverage --- .../quarkus/component/snmp/it/SnmpResource.java | 69 +++++++++++++--------- .../camel/quarkus/component/snmp/it/SnmpRoute.java | 9 +++ .../camel/quarkus/component/snmp/it/SnmpTest.java | 24 ++++---- .../component/snmp/it/SnmpTestResource.java | 2 +- 4 files changed, 63 insertions(+), 41 deletions(-) diff --git a/integration-tests-jvm/snmp/src/main/java/org/apache/camel/quarkus/component/snmp/it/SnmpResource.java b/integration-tests-jvm/snmp/src/main/java/org/apache/camel/quarkus/component/snmp/it/SnmpResource.java index 3a0475e6c7..cc9958615b 100644 --- a/integration-tests-jvm/snmp/src/main/java/org/apache/camel/quarkus/component/snmp/it/SnmpResource.java +++ b/integration-tests-jvm/snmp/src/main/java/org/apache/camel/quarkus/component/snmp/it/SnmpResource.java @@ -38,6 +38,7 @@ import org.apache.camel.component.snmp.SnmpMessage; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.snmp4j.PDU; import org.snmp4j.PDUv1; +import org.snmp4j.ScopedPDU; import org.snmp4j.mp.SnmpConstants; import org.snmp4j.smi.OID; import org.snmp4j.smi.OctetString; @@ -55,6 +56,9 @@ public class SnmpResource { @ConfigProperty(name = SnmpRoute.TRAP_V1_PORT) int trap1Port; + @ConfigProperty(name = SnmpRoute.TRAP_V3_PORT) + int trap3Port; + @ConfigProperty(name = "snmpListenAddress") String snmpListenAddress; @@ -71,8 +75,14 @@ public class SnmpResource { @Path("/producePDU/{version}") @POST @Produces(MediaType.TEXT_PLAIN) - public Response producePDU(@PathParam("version") int version, String payload) { + public Response producePDU(@PathParam("version") int version, + @QueryParam("urlAppend") String urlAppend, + String payload) { String url = String.format("snmp://%s?retries=1&snmpVersion=%d", snmpListenAddress, version); + if (urlAppend != null) { + url = url + urlAppend; + } + SnmpMessage pdu = producerTemplate.requestBody(url, version, SnmpMessage.class); String response = pdu.getSnmpMessage().getVariableBindings().stream() @@ -85,9 +95,15 @@ public class SnmpResource { @Path("/getNext/{version}") @POST @Produces(MediaType.TEXT_PLAIN) - public Response getNext(String payload, @PathParam("version") int version) { + public Response getNext(String payload, + @QueryParam("urlAppend") String urlAppend, + @PathParam("version") int version) { String url = String.format("snmp://%s?type=GET_NEXT&retries=1&protocol=udp&oids=%s&snmpVersion=%d", snmpListenAddress, payload, version); + if (urlAppend != null) { + url = url + urlAppend; + } + @SuppressWarnings("unchecked") List<SnmpMessage> pdu = producerTemplate.requestBody(url, "", List.class); @@ -105,9 +121,14 @@ public class SnmpResource { @Path("/produceTrap/{version}") @POST @Produces(MediaType.TEXT_PLAIN) - public Response produceTrap(String payload, @PathParam("version") int version) { - int port = new int[] { trap0Port, trap1Port, -1, -1 }[version]; + public Response produceTrap(String payload, + @QueryParam("urlAppend") String urlAppend, + @PathParam("version") int version) { + int port = new int[] { trap0Port, trap1Port, -1, trap3Port }[version]; String url = "snmp:127.0.0.1:" + port + "?protocol=udp&type=TRAP&snmpVersion=" + version; + if (urlAppend != null) { + url = url + urlAppend; + } PDU trap = createTrap(payload, version); producerTemplate.sendBody(url, trap); @@ -119,15 +140,11 @@ public class SnmpResource { @POST @Produces(MediaType.TEXT_PLAIN) public Response poll(@PathParam("version") int version, - @QueryParam("user") String user, - @QueryParam("securityLevel") String securityLevel, + @QueryParam("urlAppend") String urlAppend, String oid) { String url = String.format("snmp:%s?protocol=udp&snmpVersion=%d&type=POLL&oids=%s", snmpListenAddress, version, oid); - if (user != null) { - url = url + "&securityName=" + user; - } - if (securityLevel != null) { - url = url + "&securityLevel=" + securityLevel; + if (urlAppend != null) { + url = url + urlAppend; } //Even if routeBuilder is preferred instead of consumerTemplate, consumerTemplete can be used in a case, when the component uses polling consumers by default. @@ -157,31 +174,29 @@ public class SnmpResource { public PDU createTrap(String payload, int version) { OID oid = new OID("1.2.3.4.5"); Variable var = new OctetString(payload); + PDU pdu; switch (version) { case 0: PDUv1 trap0 = new PDUv1(); trap0.setGenericTrap(PDUv1.ENTERPRISE_SPECIFIC); trap0.setSpecificTrap(1); - - trap0.add(new VariableBinding(SnmpConstants.snmpTrapOID, new OctetString(payload))); - trap0.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(5000))); // put your uptime here - trap0.add(new VariableBinding(SnmpConstants.sysDescr, new OctetString("System Description"))); trap0.setEnterprise(oid); - trap0.add(new VariableBinding(oid, var)); - return trap0; + pdu = trap0; + break; case 1: - PDU trap1 = new PDU(); - - trap1.add(new VariableBinding(SnmpConstants.snmpTrapOID, new OctetString(payload))); - trap1.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(5000))); // put your uptime here - trap1.add(new VariableBinding(SnmpConstants.sysDescr, new OctetString("System Description"))); - - //Add Payload - trap1.add(new VariableBinding(oid, var)); - return trap1; + pdu = new PDU(); + break; default: - return null; + pdu = new ScopedPDU(); + break; } + + pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID, new OctetString(payload))); + pdu.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(5000))); // put your uptime here + pdu.add(new VariableBinding(SnmpConstants.sysDescr, new OctetString("System Description"))); + + pdu.add(new VariableBinding(oid, var)); + return pdu; } } diff --git a/integration-tests-jvm/snmp/src/main/java/org/apache/camel/quarkus/component/snmp/it/SnmpRoute.java b/integration-tests-jvm/snmp/src/main/java/org/apache/camel/quarkus/component/snmp/it/SnmpRoute.java index 8fe4149ece..1805ce8d43 100644 --- a/integration-tests-jvm/snmp/src/main/java/org/apache/camel/quarkus/component/snmp/it/SnmpRoute.java +++ b/integration-tests-jvm/snmp/src/main/java/org/apache/camel/quarkus/component/snmp/it/SnmpRoute.java @@ -34,6 +34,7 @@ public class SnmpRoute extends RouteBuilder { public static final String TRAP_V0_PORT = "SnmpRoute_trap_v0"; public static final String TRAP_V1_PORT = "SnmpRoute_trap_v1"; + public static final String TRAP_V3_PORT = "SnmpRoute_trap_v3"; @ConfigProperty(name = TRAP_V0_PORT) int trap0Port; @@ -41,6 +42,9 @@ public class SnmpRoute extends RouteBuilder { @ConfigProperty(name = TRAP_V1_PORT) int trap1Port; + @ConfigProperty(name = TRAP_V3_PORT) + int trap3Port; + @Inject @Named("snmpTrapResults") Map<String, Deque<SnmpMessage>> snmpResults; @@ -54,6 +58,10 @@ public class SnmpRoute extends RouteBuilder { //TRAP consumer snmpVersion=1 from("snmp:0.0.0.0:" + trap1Port + "?protocol=udp&type=TRAP&snmpVersion=1") .process(e -> snmpResults.get("v1_trap").add(e.getIn().getBody(SnmpMessage.class))); + + //TRAP consumer snmpVersion=3 + from("snmp:0.0.0.0:" + trap3Port + "?protocol=udp&type=TRAP&snmpVersion=3") + .process(e -> snmpResults.get("v3_trap").add(e.getIn().getBody(SnmpMessage.class))); } static class Producers { @@ -64,6 +72,7 @@ public class SnmpRoute extends RouteBuilder { Map<String, Deque<SnmpMessage>> map = new ConcurrentHashMap<>(); map.put("v0_trap", new ConcurrentLinkedDeque<>()); map.put("v1_trap", new ConcurrentLinkedDeque<>()); + map.put("v3_trap", new ConcurrentLinkedDeque<>()); return map; } } diff --git a/integration-tests-jvm/snmp/src/test/java/org/apache/camel/quarkus/component/snmp/it/SnmpTest.java b/integration-tests-jvm/snmp/src/test/java/org/apache/camel/quarkus/component/snmp/it/SnmpTest.java index 1220e8aa44..48dd9d1972 100644 --- a/integration-tests-jvm/snmp/src/test/java/org/apache/camel/quarkus/component/snmp/it/SnmpTest.java +++ b/integration-tests-jvm/snmp/src/test/java/org/apache/camel/quarkus/component/snmp/it/SnmpTest.java @@ -22,11 +22,9 @@ import java.util.stream.Stream; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; -import io.restassured.specification.RequestSpecification; import org.hamcrest.Matchers; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.junit.jupiter.params.provider.ValueSource; import org.snmp4j.mp.SnmpConstants; import org.snmp4j.smi.OID; @@ -51,7 +49,7 @@ class SnmpTest { public static final OID DOT_OID = new OID(new int[] { 1, 3, 6, 1, 4, 1, 6527, 3, 1, 2, 21, 2, 1, 50 }); static Stream<Integer> supportedVersions() { - return Stream.of(0, 1/*, 3 not supported because of https://issues.apache.org/jira/browse/CAMEL-19298 */); + return Stream.of(0, 1, 3); } @ParameterizedTest @@ -61,6 +59,7 @@ class SnmpTest { RestAssured.given() .body("TEXT") + .queryParam("urlAppend", version == 3 ? "&securityName=test&securityLevel=1" : null) .post("/snmp/produceTrap/" + version) .then() .statusCode(200); @@ -78,17 +77,12 @@ class SnmpTest { } @ParameterizedTest - @ValueSource(ints = { 0, 1, 3 }) + @MethodSource("supportedVersions") public void testPoll(int version) throws Exception { - RequestSpecification rs = RestAssured.given() - .body(POLL_OID.toString()); - - if (version == 3) { - rs.queryParam("user", "test") - .queryParam("securityLevel", 1); - } - - rs.post("/snmp/poll/" + version) + RestAssured.given() + .body(POLL_OID.toString()) + .queryParam("urlAppend", version == 3 ? "&securityName=test&securityLevel=1" : null) + .post("/snmp/poll/" + version) .then() .statusCode(200) .body(Matchers.equalTo("My POLL Printer - response #1")); @@ -99,6 +93,7 @@ class SnmpTest { public void testPollWith2OIDs(int version) throws Exception { RestAssured.given() .body(TWO_OIDS_A + "," + TWO_OIDS_B) + .queryParam("urlAppend", version == 3 ? "&securityName=test&securityLevel=1" : null) .post("/snmp/poll/" + version) .then() .statusCode(200) @@ -112,6 +107,7 @@ class SnmpTest { public void testPollStartingDot(int version) throws Exception { RestAssured.given() .body("." + DOT_OID) + .queryParam("urlAppend", version == 3 ? "&securityName=test&securityLevel=1" : null) .post("/snmp/poll/" + version) .then() .statusCode(200) @@ -123,6 +119,7 @@ class SnmpTest { public void testProducePDU(int version) { RestAssured.given() .body(PRODUCE_PDU_OID.toString()) + .queryParam("urlAppend", version == 3 ? "&securityName=test&securityLevel=1" : null) .post("/snmp/producePDU/" + version) .then() .statusCode(200) @@ -135,6 +132,7 @@ class SnmpTest { RestAssured.given() .body(GET_NEXT_OID.toString()) + .queryParam("urlAppend", version == 3 ? "&securityName=test&securityLevel=1" : null) .post("/snmp/getNext/" + version) .then() .statusCode(200) diff --git a/integration-tests-jvm/snmp/src/test/java/org/apache/camel/quarkus/component/snmp/it/SnmpTestResource.java b/integration-tests-jvm/snmp/src/test/java/org/apache/camel/quarkus/component/snmp/it/SnmpTestResource.java index c487d4acdc..9f8d962376 100644 --- a/integration-tests-jvm/snmp/src/test/java/org/apache/camel/quarkus/component/snmp/it/SnmpTestResource.java +++ b/integration-tests-jvm/snmp/src/test/java/org/apache/camel/quarkus/component/snmp/it/SnmpTestResource.java @@ -88,7 +88,7 @@ public class SnmpTestResource implements QuarkusTestResourceLifecycleManager { } Map<String, String> ports = AvailablePortFinder.reserveNetworkPorts(Objects::toString, SnmpRoute.TRAP_V0_PORT, - SnmpRoute.TRAP_V1_PORT); + SnmpRoute.TRAP_V1_PORT, SnmpRoute.TRAP_V3_PORT); Map<String, String> m = CollectionHelper.mergeMaps( ports, CollectionHelper.mapOf(LISTEN_ADDRESS,