jvpp: introducing callback api and future api tests for all plugins (VPP-591)
test can be run with: make test TEST=test_jvpp memory_shared.c: declaring and assigning variable in if statement makes it usage outside statement impossible. Looks like memory space assigned to variable declared in statement is freed when statement ends svm.c: - fixed case when root path can have a "/" at beggining - added option for test to operate over shared memory space with /vpe-api name and not create new one with name consisting of root path and region name which would require root permisions Change-Id: Iff1170dc6a5c1be134c152f2757c7ab9b919a8ed Signed-off-by: Matej Perina <mperina@cisco.com>
This commit is contained in:

committed by
Florin Coras

parent
acdc306093
commit
d135c19a1f
@ -426,7 +426,7 @@ shm_name_from_svm_map_region_args (svm_map_region_args_t * a)
|
||||
if (a->name[0] == '/')
|
||||
name_offset = 1;
|
||||
|
||||
shm_name = format (0, "/%s-%s%c", a->root_path,
|
||||
shm_name = format (0, "/%s-%s%c", &a->root_path[root_path_offset],
|
||||
&a->name[name_offset], 0);
|
||||
}
|
||||
else
|
||||
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.acl.test;
|
||||
|
||||
import io.fd.vpp.jvpp.AbstractCallbackApiTest;
|
||||
import io.fd.vpp.jvpp.acl.JVppAclImpl;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class CallbackApiTest extends AbstractCallbackApiTest {
|
||||
|
||||
private static Logger LOG = Logger.getLogger(CallbackApiTest.class.getName());
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
LOG.info("Testing ControlPing using Java callback API for core plugin");
|
||||
testControlPing(args[0], new JVppAclImpl());
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.acl.test;
|
||||
|
||||
import io.fd.vpp.jvpp.Assertions;
|
||||
import io.fd.vpp.jvpp.JVppRegistry;
|
||||
import io.fd.vpp.jvpp.JVppRegistryImpl;
|
||||
import io.fd.vpp.jvpp.acl.JVppAclImpl;
|
||||
import io.fd.vpp.jvpp.acl.dto.AclDetailsReplyDump;
|
||||
import io.fd.vpp.jvpp.acl.dto.AclDump;
|
||||
import io.fd.vpp.jvpp.acl.future.FutureJVppAclFacade;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class FutureApiTest {
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(FutureApiTest.class.getName());
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
testFutureApi(args);
|
||||
}
|
||||
|
||||
private static void testFutureApi(String[] args) throws Exception {
|
||||
LOG.info("Testing Java future API for core plugin");
|
||||
try (final JVppRegistry registry = new JVppRegistryImpl("FutureApiTest", args[0]);
|
||||
final FutureJVppAclFacade jvppFacade = new FutureJVppAclFacade(registry, new JVppAclImpl())) {
|
||||
LOG.info("Successfully connected to VPP");
|
||||
|
||||
testAclDump(jvppFacade);
|
||||
|
||||
LOG.info("Disconnecting...");
|
||||
}
|
||||
}
|
||||
|
||||
private static void testAclDump(final FutureJVppAclFacade jvpp) throws Exception {
|
||||
LOG.info("Sending AclDump request...");
|
||||
final AclDump request = new AclDump();
|
||||
|
||||
final CompletableFuture<AclDetailsReplyDump>
|
||||
replyFuture = jvpp.aclDump(request).toCompletableFuture();
|
||||
final AclDetailsReplyDump reply = replyFuture.get();
|
||||
|
||||
Assertions.assertNotNull(reply);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
release version:
|
||||
sudo java -cp build-vpp-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp-native/vpp/vpp-api/java/jvpp-acl-17.10.jar io.fd.vpp.jvpp.acl.test.[test-name]
|
||||
debug version:
|
||||
sudo java -cp build-vpp_debug-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp_debug-native/vpp/vpp-api/java/jvpp-acl-17.10.jar io.fd.vpp.jvpp.acl.test.[test-name]
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.core.test;
|
||||
|
||||
import io.fd.vpp.jvpp.AbstractCallbackApiTest;
|
||||
import io.fd.vpp.jvpp.core.JVppCoreImpl;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class CallbackApiTest extends AbstractCallbackApiTest {
|
||||
|
||||
private static Logger LOG = Logger.getLogger(CallbackApiTest.class.getName());
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
LOG.info("Testing ControlPing using Java callback API for core plugin");
|
||||
testControlPing(args[0], new JVppCoreImpl());
|
||||
}
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.core.test;
|
||||
|
||||
import io.fd.vpp.jvpp.JVppRegistry;
|
||||
import io.fd.vpp.jvpp.JVppRegistryImpl;
|
||||
import io.fd.vpp.jvpp.core.JVppCoreImpl;
|
||||
import io.fd.vpp.jvpp.core.dto.BridgeDomainDetailsReplyDump;
|
||||
import io.fd.vpp.jvpp.core.dto.BridgeDomainDump;
|
||||
import io.fd.vpp.jvpp.core.dto.GetNodeIndex;
|
||||
import io.fd.vpp.jvpp.core.dto.GetNodeIndexReply;
|
||||
import io.fd.vpp.jvpp.core.dto.ShowVersion;
|
||||
import io.fd.vpp.jvpp.core.dto.ShowVersionReply;
|
||||
import io.fd.vpp.jvpp.core.dto.SwInterfaceDetails;
|
||||
import io.fd.vpp.jvpp.core.dto.SwInterfaceDetailsReplyDump;
|
||||
import io.fd.vpp.jvpp.core.dto.SwInterfaceDump;
|
||||
import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class FutureApiTest {
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(FutureApiTest.class.getName());
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
testFutureApi(args);
|
||||
}
|
||||
|
||||
private static void testFutureApi(String[] args) throws Exception {
|
||||
LOG.info("Testing Java future API for core plugin");
|
||||
try (final JVppRegistry registry = new JVppRegistryImpl("FutureApiTest", args[0]);
|
||||
final FutureJVppCoreFacade jvppFacade = new FutureJVppCoreFacade(registry, new JVppCoreImpl())) {
|
||||
LOG.info("Successfully connected to VPP");
|
||||
|
||||
testEmptyBridgeDomainDump(jvppFacade);
|
||||
|
||||
LOG.info("Disconnecting...");
|
||||
}
|
||||
}
|
||||
|
||||
private static void testEmptyBridgeDomainDump(final FutureJVppCoreFacade jvpp) throws Exception {
|
||||
LOG.info("Sending BridgeDomainDump request...");
|
||||
final BridgeDomainDump request = new BridgeDomainDump();
|
||||
request.bdId = -1; // dump call
|
||||
|
||||
final CompletableFuture<BridgeDomainDetailsReplyDump>
|
||||
replyFuture = jvpp.bridgeDomainDump(request).toCompletableFuture();
|
||||
final BridgeDomainDetailsReplyDump reply = replyFuture.get();
|
||||
|
||||
if (reply == null || reply.bridgeDomainDetails == null) {
|
||||
throw new IllegalStateException("Received null response for empty dump: " + reply);
|
||||
} else {
|
||||
LOG.info(
|
||||
String.format(
|
||||
"Received bridge-domain dump reply with list of bridge-domains: %s",
|
||||
reply.bridgeDomainDetails));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
This package contains basic tests for jvpp. To run the tests:
|
||||
|
||||
- Make sure VPP is running
|
||||
- From VPP's build-root/ folder execute:
|
||||
- release version: sudo java -cp build-vpp-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp-native/vpp/vpp-api/java/jvpp-core-17.10.jar io.fd.vpp.jvpp.core.test.[test name]
|
||||
- debug version: sudo java -cp build-vpp_debug-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp_debug-native/vpp/vpp-api/java/jvpp-core-17.10.jar io.fd.vpp.jvpp.core.test.[test name]
|
||||
|
||||
Available tests:
|
||||
CallbackApiTest - Similar to ControlPingTest, invokes more complex calls (e.g. interface dump) using low level JVpp APIs
|
||||
CallbackJVppFacadeNotificationTest - Tests interface notifications using Callback based JVpp facade
|
||||
CallbackJVppFacadeTest - Execution of more complex calls using Callback based JVpp facade
|
||||
CallbackNotificationApiTest - Tests interface notifications using low level JVpp APIs
|
||||
ControlPingTest - Simple test executing a single control ping using low level JVpp APIs
|
||||
CreateSubInterfaceTest - Tests sub-interface creation
|
||||
FutureApiNotificationTest - Tests interface notifications using Future based JVpp facade
|
||||
FutureApiTest - Execution of more complex calls using Future based JVpp facade
|
||||
L2AclTest - Tests L2 ACL creation
|
||||
LispAdjacencyTest - Tests lisp adjacency creation and read (custom vpe.api type support showcase)
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.ioamexport.test;
|
||||
|
||||
import io.fd.vpp.jvpp.AbstractCallbackApiTest;
|
||||
import io.fd.vpp.jvpp.ioamexport.JVppIoamexportImpl;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
||||
public class CallbackApiTest extends AbstractCallbackApiTest {
|
||||
|
||||
private static Logger LOG = Logger.getLogger(CallbackApiTest.class.getName());
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
LOG.info("Testing ControlPing using Java callback API for ioamexport plugin");
|
||||
testControlPing(args[0], new JVppIoamexportImpl());
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.ioamexport.test;
|
||||
|
||||
|
||||
import io.fd.vpp.jvpp.Assertions;
|
||||
import io.fd.vpp.jvpp.JVppRegistry;
|
||||
import io.fd.vpp.jvpp.JVppRegistryImpl;
|
||||
import io.fd.vpp.jvpp.ioamexport.JVppIoamexportImpl;
|
||||
import io.fd.vpp.jvpp.ioamexport.dto.IoamExportIp6EnableDisable;
|
||||
import io.fd.vpp.jvpp.ioamexport.dto.IoamExportIp6EnableDisableReply;
|
||||
import io.fd.vpp.jvpp.ioamexport.future.FutureJVppIoamexportFacade;
|
||||
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class FutureApiTest {
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(FutureApiTest.class.getName());
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
testCallbackApi(args);
|
||||
}
|
||||
|
||||
private static void testCallbackApi(String[] args) throws Exception {
|
||||
LOG.info("Testing Java callback API for ioamexport plugin");
|
||||
try (final JVppRegistry registry = new JVppRegistryImpl("FutureApiTest", args[0]);
|
||||
final FutureJVppIoamexportFacade jvpp = new FutureJVppIoamexportFacade(registry, new JVppIoamexportImpl())) {
|
||||
LOG.info("Successfully connected to VPP");
|
||||
|
||||
testIoamExportIp6EnableDisable(jvpp);
|
||||
|
||||
LOG.info("Disconnecting...");
|
||||
}
|
||||
}
|
||||
|
||||
private static void testIoamExportIp6EnableDisable(FutureJVppIoamexportFacade jvpp) throws Exception {
|
||||
LOG.info("Sending IoamExportIp6EnableDisable request...");
|
||||
final IoamExportIp6EnableDisable request = new IoamExportIp6EnableDisable();
|
||||
|
||||
final Future<IoamExportIp6EnableDisableReply> replyFuture = jvpp.ioamExportIp6EnableDisable(request).toCompletableFuture();
|
||||
final IoamExportIp6EnableDisableReply reply = replyFuture.get();
|
||||
|
||||
Assertions.assertNotNull(reply);
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
release version:
|
||||
sudo java -cp build-vpp-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp_debug-native/vpp/vpp-api/java/jvpp-ioamexport-17.10.jar io.fd.vpp.jvpp.ioamexport.test.[test-name]
|
||||
debug version:
|
||||
sudo java -cp build-vpp_debug-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp_debug-native/vpp/vpp-api/java/jvpp-ioamexport-17.10.jar io.fd.vpp.jvpp.ioamexport.test.[test-name]
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.ioampot.test;
|
||||
|
||||
import io.fd.vpp.jvpp.AbstractCallbackApiTest;
|
||||
import io.fd.vpp.jvpp.ioampot.JVppIoampotImpl;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class CallbackApiTest extends AbstractCallbackApiTest {
|
||||
|
||||
private static Logger LOG = Logger.getLogger(CallbackApiTest.class.getName());
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
LOG.info("Testing ControlPing using Java callback API for ioampot plugin");
|
||||
testControlPing(args[0], new JVppIoampotImpl());
|
||||
}
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.ioampot.test;
|
||||
|
||||
|
||||
import io.fd.vpp.jvpp.JVppRegistry;
|
||||
import io.fd.vpp.jvpp.JVppRegistryImpl;
|
||||
import io.fd.vpp.jvpp.ioampot.JVppIoampotImpl;
|
||||
import io.fd.vpp.jvpp.ioampot.dto.PotProfileShowConfigDetailsReplyDump;
|
||||
import io.fd.vpp.jvpp.ioampot.dto.PotProfileShowConfigDump;
|
||||
import io.fd.vpp.jvpp.ioampot.future.FutureJVppIoampotFacade;
|
||||
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class FutureApiTest {
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(io.fd.vpp.jvpp.ioampot.test.FutureApiTest.class.getName());
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
testCallbackApi(args);
|
||||
}
|
||||
|
||||
private static void testCallbackApi(String[] args) throws Exception {
|
||||
LOG.info("Testing Java callback API for ioampot plugin");
|
||||
try (final JVppRegistry registry = new JVppRegistryImpl("FutureApiTest", args[0]);
|
||||
final FutureJVppIoampotFacade jvpp = new FutureJVppIoampotFacade(registry, new JVppIoampotImpl())) {
|
||||
LOG.info("Successfully connected to VPP");
|
||||
|
||||
testPotProfileShowConfigDump(jvpp);
|
||||
|
||||
LOG.info("Disconnecting...");
|
||||
}
|
||||
}
|
||||
|
||||
private static void testPotProfileShowConfigDump(FutureJVppIoampotFacade jvpp) throws Exception {
|
||||
LOG.info("Sending PotProfileShowConfigDump request...");
|
||||
final PotProfileShowConfigDump request = new PotProfileShowConfigDump();
|
||||
|
||||
final Future<PotProfileShowConfigDetailsReplyDump> replyFuture = jvpp.potProfileShowConfigDump(request).toCompletableFuture();
|
||||
final PotProfileShowConfigDetailsReplyDump reply = replyFuture.get();
|
||||
|
||||
if (reply == null || reply.potProfileShowConfigDetails == null) {
|
||||
throw new IllegalStateException("Received null response for empty dump: " + reply);
|
||||
} else {
|
||||
LOG.info(
|
||||
String.format(
|
||||
"Received pot profile show config dump reply: %s",
|
||||
reply.potProfileShowConfigDetails));
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
release version:
|
||||
sudo java -cp build-vpp-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp_debug-native/vpp/vpp-api/java/jvpp-ioampot-17.10.jar io.fd.vpp.jvpp.ioampot.test.[test-name]
|
||||
debug version:
|
||||
sudo java -cp build-vpp_debug-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp_debug-native/vpp/vpp-api/java/jvpp-ioampot-17.10.jar io.fd.vpp.jvpp.ioampot.test.[test-name]
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.ioamtrace.test;
|
||||
|
||||
import io.fd.vpp.jvpp.AbstractCallbackApiTest;
|
||||
import io.fd.vpp.jvpp.ioamtrace.JVppIoamtraceImpl;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class CallbackApiTest extends AbstractCallbackApiTest {
|
||||
|
||||
private static Logger LOG = Logger.getLogger(CallbackApiTest.class.getName());
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
LOG.info("Testing ControlPing using Java callback API for ioamtrace plugin");
|
||||
testControlPing(args[0], new JVppIoamtraceImpl());
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.ioamtrace.test;
|
||||
|
||||
|
||||
import io.fd.vpp.jvpp.Assertions;
|
||||
import io.fd.vpp.jvpp.JVppRegistry;
|
||||
import io.fd.vpp.jvpp.JVppRegistryImpl;
|
||||
import io.fd.vpp.jvpp.ioamtrace.JVppIoamtraceImpl;
|
||||
import io.fd.vpp.jvpp.ioamtrace.dto.TraceProfileShowConfig;
|
||||
import io.fd.vpp.jvpp.ioamtrace.dto.TraceProfileShowConfigReply;
|
||||
import io.fd.vpp.jvpp.ioamtrace.future.FutureJVppIoamtraceFacade;
|
||||
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class FutureApiTest {
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(io.fd.vpp.jvpp.ioamtrace.test.FutureApiTest.class.getName());
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
testCallbackApi(args);
|
||||
}
|
||||
|
||||
private static void testCallbackApi(String[] args) throws Exception {
|
||||
LOG.info("Testing Java callback API for ioamtrace plugin");
|
||||
try (final JVppRegistry registry = new JVppRegistryImpl("FutureApiTest", args[0]);
|
||||
final FutureJVppIoamtraceFacade jvpp = new FutureJVppIoamtraceFacade(registry, new JVppIoamtraceImpl())) {
|
||||
LOG.info("Successfully connected to VPP");
|
||||
|
||||
testTraceProfileShowConfig(jvpp);
|
||||
|
||||
LOG.info("Disconnecting...");
|
||||
}
|
||||
}
|
||||
|
||||
private static void testTraceProfileShowConfig(FutureJVppIoamtraceFacade jvpp) throws Exception {
|
||||
LOG.info("Sending TraceProfileShowConfig request...");
|
||||
final TraceProfileShowConfig request = new TraceProfileShowConfig();
|
||||
|
||||
final Future<TraceProfileShowConfigReply> replyFuture = jvpp.traceProfileShowConfig(request).toCompletableFuture();
|
||||
final TraceProfileShowConfigReply reply = replyFuture.get();
|
||||
|
||||
Assertions.assertNotNull(reply);
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
release version:
|
||||
sudo java -cp build-vpp-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp_debug-native/vpp/vpp-api/java/jvpp-ioamtrace-17.10.jar io.fd.vpp.jvpp.ioamtrace.test.[test-name]
|
||||
debug version:
|
||||
sudo java -cp build-vpp_debug-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp_debug-native/vpp/vpp-api/java/jvpp-ioamtrace-17.10.jar io.fd.vpp.jvpp.ioamtrace.test.[test-name]
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.nat.test;
|
||||
|
||||
import io.fd.vpp.jvpp.AbstractCallbackApiTest;
|
||||
import io.fd.vpp.jvpp.nat.JVppNatImpl;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class CallbackApiTest extends AbstractCallbackApiTest {
|
||||
|
||||
private static Logger LOG = Logger.getLogger(CallbackApiTest.class.getName());
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
LOG.info("Testing ControlPing using Java callback API for core plugin");
|
||||
testControlPing(args[0], new JVppNatImpl());
|
||||
}
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp.nat.test;
|
||||
|
||||
|
||||
import io.fd.vpp.jvpp.JVppRegistry;
|
||||
import io.fd.vpp.jvpp.JVppRegistryImpl;
|
||||
import io.fd.vpp.jvpp.nat.JVppNatImpl;
|
||||
import io.fd.vpp.jvpp.nat.dto.SnatAddressDetailsReplyDump;
|
||||
import io.fd.vpp.jvpp.nat.dto.SnatAddressDump;
|
||||
import io.fd.vpp.jvpp.nat.future.FutureJVppNatFacade;
|
||||
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class FutureApiTest {
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(io.fd.vpp.jvpp.nat.test.FutureApiTest.class.getName());
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
testCallbackApi(args);
|
||||
}
|
||||
|
||||
private static void testCallbackApi(String[] args) throws Exception {
|
||||
LOG.info("Testing Java callback API for snat plugin");
|
||||
try (final JVppRegistry registry = new JVppRegistryImpl("FutureApiTest", args[0]);
|
||||
final FutureJVppNatFacade jvpp = new FutureJVppNatFacade(registry, new JVppNatImpl())) {
|
||||
LOG.info("Successfully connected to VPP");
|
||||
|
||||
testAclDump(jvpp);
|
||||
|
||||
LOG.info("Disconnecting...");
|
||||
}
|
||||
}
|
||||
|
||||
private static void testAclDump(FutureJVppNatFacade jvpp) throws Exception {
|
||||
LOG.info("Sending SnatAddressDump request...");
|
||||
final SnatAddressDump request = new SnatAddressDump();
|
||||
|
||||
final Future<SnatAddressDetailsReplyDump> replyFuture = jvpp.snatAddressDump(request).toCompletableFuture();
|
||||
final SnatAddressDetailsReplyDump reply = replyFuture.get();
|
||||
|
||||
if (reply == null || reply.snatAddressDetails == null) {
|
||||
throw new IllegalStateException("Received null response for empty dump: " + reply);
|
||||
} else {
|
||||
LOG.info(
|
||||
String.format(
|
||||
"Received snat address dump reply with list of snat address: %s",
|
||||
reply.snatAddressDetails));
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
release version:
|
||||
sudo java -cp build-vpp-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp_debug-native/vpp/vpp-api/java/jvpp-nat-17.10.jar io.fd.vpp.jvpp.nat.test.[test-name]
|
||||
debug version:
|
||||
sudo java -cp build-vpp_debug-native/vpp/vpp-api/java/jvpp-registry-17.10.jar:build-vpp_debug-native/vpp/vpp-api/java/jvpp-nat-17.10.jar io.fd.vpp.jvpp.nat.test.[test-name]
|
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp;
|
||||
|
||||
import io.fd.vpp.jvpp.callback.ControlPingCallback;
|
||||
import io.fd.vpp.jvpp.dto.ControlPing;
|
||||
import io.fd.vpp.jvpp.dto.ControlPingReply;
|
||||
|
||||
public abstract class AbstractCallbackApiTest {
|
||||
|
||||
private static int receivedPingCount = 0;
|
||||
private static int errorPingCount = 0;
|
||||
|
||||
public static void testControlPing(String shm_prefix, JVpp jvpp) throws Exception {
|
||||
try (JVppRegistry registry = new JVppRegistryImpl("CallbackApiTest", shm_prefix)) {
|
||||
|
||||
registry.register(jvpp, new ControlPingCallback() {
|
||||
@Override
|
||||
public void onControlPingReply(final ControlPingReply reply) {
|
||||
System.out.printf("Received ControlPingReply: %s%n", reply);
|
||||
receivedPingCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(VppCallbackException ex) {
|
||||
System.out.printf("Received onError exception: call=%s, reply=%d, context=%d ", ex.getMethodName(),
|
||||
ex.getErrorCode(), ex.getCtxId());
|
||||
errorPingCount++;
|
||||
}
|
||||
|
||||
});
|
||||
System.out.println("Successfully connected to VPP");
|
||||
Thread.sleep(1000);
|
||||
|
||||
System.out.println("Sending control ping using JVppRegistry");
|
||||
registry.controlPing(jvpp.getClass());
|
||||
|
||||
Thread.sleep(2000);
|
||||
|
||||
System.out.println("Sending control ping using JVpp plugin");
|
||||
jvpp.send(new ControlPing());
|
||||
|
||||
Thread.sleep(2000);
|
||||
System.out.println("Disconnecting...");
|
||||
Assertions.assertEquals(2, receivedPingCount);
|
||||
Assertions.assertEquals(0, errorPingCount);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Cisco and/or its affiliates.
|
||||
*
|
||||
* 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.fd.vpp.jvpp;
|
||||
|
||||
public class Assertions {
|
||||
|
||||
public static void assertEquals(final int expected, final int actual) {
|
||||
if (expected != actual) {
|
||||
throw new IllegalArgumentException(String.format("Expected[%s]/Actual[%s]", expected, actual));
|
||||
}
|
||||
}
|
||||
|
||||
public static void assertNotNull(final Object value) {
|
||||
if (value == null) {
|
||||
throw new IllegalArgumentException("Variable is null");
|
||||
}
|
||||
}
|
||||
}
|
54
test/jvpp_connection.py
Normal file
54
test/jvpp_connection.py
Normal file
@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env python
|
||||
import os
|
||||
import subprocess
|
||||
from vpp_papi_provider import VppPapiProvider
|
||||
from threading import Timer
|
||||
|
||||
from framework import VppTestCase
|
||||
|
||||
# Api files path
|
||||
API_FILES_PATH = "vpp/vpp-api/java"
|
||||
|
||||
# Registry jar file name prefix
|
||||
REGISTRY_JAR_PREFIX = "jvpp-registry"
|
||||
|
||||
|
||||
class TestJVppConnection(VppTestCase):
|
||||
|
||||
def full_jar_name(self, install_dir, jar_name, version):
|
||||
return os.path.join(install_dir, API_FILES_PATH,
|
||||
"{0}-{1}.jar".format(jar_name, version))
|
||||
|
||||
def jvpp_connection_test(self, api_jar_name, test_class_name, timeout):
|
||||
install_dir = os.getenv('VPP_TEST_BUILD_DIR')
|
||||
print("Install directory : {0}".format(install_dir))
|
||||
|
||||
version_reply = self.vapi.show_version()
|
||||
version = version_reply.version.split("-")[0]
|
||||
registry_jar_path = self.full_jar_name(install_dir,
|
||||
REGISTRY_JAR_PREFIX, version)
|
||||
print("JVpp Registry jar path : {0}".format(registry_jar_path))
|
||||
|
||||
api_jar_path = self.full_jar_name(install_dir, api_jar_name, version)
|
||||
print("Api jar path : {0}".format(api_jar_path))
|
||||
|
||||
# passes shm prefix as parameter to create connection with same value
|
||||
command = ["java", "-cp",
|
||||
"{0}:{1}".format(registry_jar_path, api_jar_path),
|
||||
test_class_name, "/{0}-vpe-api".format(self.shm_prefix)]
|
||||
print("Test Command : {0}, Timeout : {1}".format(command, timeout))
|
||||
|
||||
self.process = subprocess.Popen(command, shell=False,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE, bufsize=1,
|
||||
universal_newlines=True)
|
||||
|
||||
out, err = self.process.communicate()
|
||||
print("Process output : {0}{1}".format(os.linesep, out))
|
||||
print("Process error output : {0}{1}".format(os.linesep, err))
|
||||
self.assert_equal(self.process.returncode, 0, "process return code")
|
||||
|
||||
def tearDown(self):
|
||||
print("Tearing down jvpp test")
|
||||
if self.process.poll() is None:
|
||||
self.process.kill()
|
82
test/test_jvpp.py
Normal file
82
test/test_jvpp.py
Normal file
@ -0,0 +1,82 @@
|
||||
from jvpp_connection import TestJVppConnection
|
||||
|
||||
|
||||
class TestJVpp(TestJVppConnection):
|
||||
""" JVPP Core Test Case """
|
||||
|
||||
def invoke_for_jvpp_core(self, api_jar_name, test_class_name):
|
||||
self.jvpp_connection_test(api_jar_name=api_jar_name,
|
||||
test_class_name=test_class_name,
|
||||
timeout=10)
|
||||
|
||||
def test_vpp_core_callback_api(self):
|
||||
""" JVPP Core Callback Api Test Case """
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-core",
|
||||
test_class_name="io.fd.vpp.jvpp.core.test."
|
||||
"CallbackApiTest")
|
||||
|
||||
def test_vpp_core_future_api(self):
|
||||
"""JVPP Core Future Api Test Case"""
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-core",
|
||||
test_class_name="io.fd.vpp.jvpp.core.test."
|
||||
"FutureApiTest")
|
||||
|
||||
def test_vpp_acl_callback_api(self):
|
||||
""" JVPP Acl Callback Api Test Case """
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-acl",
|
||||
test_class_name="io.fd.vpp.jvpp.acl.test."
|
||||
"CallbackApiTest")
|
||||
|
||||
def test_vpp_acl_future_api(self):
|
||||
"""JVPP Acl Future Api Test Case"""
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-acl",
|
||||
test_class_name="io.fd.vpp.jvpp.acl.test."
|
||||
"FutureApiTest")
|
||||
|
||||
def test_vpp_ioamexport_callback_api(self):
|
||||
""" JVPP Ioamexport Callback Api Test Case """
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-ioamexport",
|
||||
test_class_name="io.fd.vpp.jvpp.ioamexport."
|
||||
"test.CallbackApiTest")
|
||||
|
||||
def test_vpp_ioamexport_future_api(self):
|
||||
"""JVPP Ioamexport Future Api Test Case"""
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-ioamexport",
|
||||
test_class_name="io.fd.vpp.jvpp.ioamexport."
|
||||
"test.FutureApiTest")
|
||||
|
||||
def test_vpp_ioampot_callback_api(self):
|
||||
""" JVPP Ioampot Callback Api Test Case """
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-ioampot",
|
||||
test_class_name="io.fd.vpp.jvpp.ioampot."
|
||||
"test.CallbackApiTest")
|
||||
|
||||
def test_vpp_ioampot_future_api(self):
|
||||
"""JVPP Ioampot Future Api Test Case"""
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-ioampot",
|
||||
test_class_name="io.fd.vpp.jvpp.ioampot."
|
||||
"test.FutureApiTest")
|
||||
|
||||
def test_vpp_ioamtrace_callback_api(self):
|
||||
""" JVPP Ioamtrace Callback Api Test Case """
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-ioamtrace",
|
||||
test_class_name="io.fd.vpp.jvpp.ioamtrace."
|
||||
"test.CallbackApiTest")
|
||||
|
||||
def test_vpp_ioamtrace_future_api(self):
|
||||
"""JVPP Ioamtrace Future Api Test Case"""
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-ioamtrace",
|
||||
test_class_name="io.fd.vpp.jvpp.ioamtrace."
|
||||
"test.FutureApiTest")
|
||||
|
||||
def test_vpp_snat_callback_api(self):
|
||||
""" JVPP Snat Callback Api Test Case """
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-nat",
|
||||
test_class_name="io.fd.vpp.jvpp.nat.test."
|
||||
"CallbackApiTest")
|
||||
|
||||
def test_vpp_snat_future_api(self):
|
||||
"""JVPP Snat Future Api Test Case"""
|
||||
self.invoke_for_jvpp_core(api_jar_name="jvpp-nat",
|
||||
test_class_name="io.fd.vpp.jvpp.nat.test."
|
||||
"FutureApiTest")
|
Reference in New Issue
Block a user