import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.ImmutableList;
import io.fd.hc2vpp.acl.util.AclContextManager;
import io.fd.hc2vpp.common.translate.util.ByteDataTranslator;
import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer;
import io.fd.honeycomb.translate.write.WriteFailedException;
import io.fd.vpp.jvpp.acl.dto.AclInterfaceSetAclList;
import io.fd.vpp.jvpp.acl.future.FutureJVppAclFacade;
+import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;
import javax.annotation.Nonnull;
private final MappingContext mappingContext;
private InstanceIdentifier<Acl> identifier;
- private List<String> inputAclNames;
- private List<String> outputAclNames;
+ private List<String> inputAclNames = Collections.emptyList();
+ private List<String> outputAclNames = Collections.emptyList();
private AclContextManager standardAclContext;
private NamingContext interfaceContext;
}
public AclInterfaceAssignmentRequest inputAclNames(@Nonnull final List<String> inputAclNames) {
- this.inputAclNames = inputAclNames;
+ checkNotNull(inputAclNames, "Input ACL names cannot be null");
+ this.inputAclNames = ImmutableList.copyOf(inputAclNames);
return this;
}
public AclInterfaceAssignmentRequest outputAclNames(@Nonnull final List<String> outputAclNames) {
- this.outputAclNames = outputAclNames;
+ checkNotNull(outputAclNames, "Output ACL names cannot be null");
+ this.outputAclNames = ImmutableList.copyOf(outputAclNames);
return this;
}
private void checkValidRequest() {
checkNotNull(identifier, "Identifier cannot be null");
- checkNotNull(inputAclNames, "Input ACL names cannot be null");
- checkNotNull(outputAclNames, "Output ACL names cannot be null");
checkNotNull(standardAclContext, "ACL context cannot be null");
checkNotNull(interfaceContext, "Interface context cannot be null");
}
"Executing acl interface assignment delete request for interface={}, input ACL's={},output ACL's={}",
interfaceName, inputAclNames, outputAclNames);
+ // remove all ACLs, just in case they were set by AclInterfaceAssignmentRequest user
+ inputAclNames = Collections.emptyList();
+ outputAclNames = Collections.emptyList();
+
getReplyForDelete(api.aclInterfaceSetAclList(createRequest(interfaceName)).toCompletableFuture(),
identifier);
LOG.debug(
AclInterfaceSetAclList request = new AclInterfaceSetAclList();
request.swIfIndex = interfaceContext.getIndex(interfaceName, mappingContext);
+ // FIXME (HC2VPP-201): possible overflow
request.nInput = (byte) inputAclNames.size();
request.count = (byte) (inputAclNames.size() + outputAclNames.size());
request.acls = Stream.concat(inputAclNames.stream(), outputAclNames.stream())
.standardAclContext(standardAclContext)
.interfaceContext(interfaceContext)
.identifier(id)
- .inputAclNames(getAclNames(dataBefore.getIngress()))
- .outputAclNames(getAclNames(dataBefore.getEgress()))
.executeAsDelete(getjVppAclFacade());
}
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
import io.fd.vpp.jvpp.acl.dto.AclInterfaceSetAclListReply;
import io.fd.vpp.jvpp.acl.future.FutureJVppAclFacade;
import java.util.Arrays;
-import java.util.Collections;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
verifyVariant(create(mappingContext).identifier(validIdentifier));
verifyVariant(create(mappingContext).identifier(validIdentifier).interfaceContext(interfaceContext));
-
- verifyVariant(create(mappingContext).identifier(validIdentifier).interfaceContext(interfaceContext)
- .standardAclContext(aclContext));
-
- verifyVariant(create(mappingContext).identifier(validIdentifier).interfaceContext(interfaceContext)
- .standardAclContext(aclContext).inputAclNames(Collections.emptyList()));
-
- verifyVariant(create(mappingContext).identifier(validIdentifier).interfaceContext(interfaceContext)
- .standardAclContext(aclContext).outputAclNames(Collections.emptyList()));
}
private void verifyVariant(final AclInterfaceAssignmentRequest request) throws WriteFailedException {
@Test
public void executeAsCreate() throws Exception {
-
createValidRequest().executeAsCreate(api);
+
+ verify(api).aclInterfaceSetAclList(requestCaptor.capture());
+ verifyValidRequest(requestCaptor.getValue());
+ }
+
+ @Test
+ public void executeAsUpdate() throws Exception {
createValidRequest().executeAsUpdate(api, mock(Acl.class), mock(Acl.class));
+
+ verify(api).aclInterfaceSetAclList(requestCaptor.capture());
+ verifyValidRequest(requestCaptor.getValue());
+ }
+
+ @Test
+ public void executeAsDelete() throws Exception {
+ create(mappingContext)
+ .identifier(validIdentifier)
+ .standardAclContext(aclContext)
+ .interfaceContext(interfaceContext)
+ .executeAsDelete(api);
+
+ verify(api).aclInterfaceSetAclList(requestCaptor.capture());
+ final AclInterfaceSetAclList request = requestCaptor.getValue();
+ assertNotNull(request);
+ assertEquals(0, request.count);
+ assertEquals(0, request.nInput);
+ assertTrue(Arrays.equals(new int[] {}, request.acls));
+ }
+
+ @Test
+ public void executeAsDeleteWithAclNames() throws Exception {
createValidRequest().executeAsDelete(api);
- verify(api, times(3)).aclInterfaceSetAclList(requestCaptor.capture());
- requestCaptor.getAllValues().forEach(AclInterfaceAssignmentRequestTest::verifyValidRequest);
+ verify(api).aclInterfaceSetAclList(requestCaptor.capture());
+ final AclInterfaceSetAclList request = requestCaptor.getValue();
+ assertNotNull(request);
+ assertEquals(0, request.count);
+ assertEquals(0, request.nInput);
+ assertTrue(Arrays.equals(new int[]{}, request.acls));
}
private AclInterfaceAssignmentRequest createValidRequest() {
package io.fd.hc2vpp.acl.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;
import io.fd.vpp.jvpp.acl.dto.AclInterfaceSetAclList;
import io.fd.vpp.jvpp.acl.dto.AclInterfaceSetAclListReply;
import io.fd.vpp.jvpp.acl.future.FutureJVppAclFacade;
+import java.util.Collections;
import org.junit.Test;
import org.mockito.Mock;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.acl.rev161214.VppAclInterfaceAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.acl.rev161214._interface.acl.attributes.Acl;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.acl.rev161214._interface.acl.attributes.AclBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.acl.rev161214._interface.acl.attributes.acl.IngressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.acl.rev161214.vpp.acls.base.attributes.VppAcls;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.acl.rev161214.vpp.acls.base.attributes.VppAclsBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public class InterfaceAclCustomizerTest extends WriterCustomizerTest implements AclTestSchemaContext {
@Test
public void testDelete() throws Exception {
- final Acl acl = new AclBuilder().build();
+ final VppAcls
+ element = mock(VppAcls.class);
+ final Acl acl = new AclBuilder()
+ .setIngress(new IngressBuilder()
+ .setVppAcls(Collections.singletonList(new VppAclsBuilder()
+ .setName("asd")
+ .build()))
+ .build())
+ .build();
customizer.deleteCurrentAttributes(ACL_ID, acl, writeContext);
final AclInterfaceSetAclList list = new AclInterfaceSetAclList();
list.swIfIndex = IFACE_ID;