blob: 7f90ea42be570cae80f39e5f4510ac751cfc2d5d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.jclouds.net.domain;
import static org.jclouds.net.domain.IpPermission.builder;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import java.util.List;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
public class IpPermissionTest {
@Test
public void testCompareProtocol() {
final IpPermission tcp = builder().ipProtocol(IpProtocol.TCP).build();
final IpPermission tcp2 = builder().ipProtocol(IpProtocol.TCP).build();
assertEqualAndComparable(tcp, tcp2);
final IpPermission udp = builder().ipProtocol(IpProtocol.UDP).build();
assertOrder(tcp, udp);
final IpPermission t10 = builder().fromPermission(tcp).fromPort(10).build();
final IpPermission t20 = builder().fromPermission(tcp).fromPort(20).build();
final IpPermission u10 = builder().fromPermission(udp).fromPort(10).build();
final IpPermission t0to10 = builder().fromPermission(tcp).toPort(10).build();
final IpPermission t0to20 = builder().fromPermission(tcp).toPort(20).build();
assertTotalOrder(ImmutableList.of(tcp, t0to10, t0to20, t10, t20, udp, u10));
}
@Test
public void testCompareTenantIdGroupNamePairs() {
final IpPermission tcp = builder().ipProtocol(IpProtocol.TCP).build();
final IpPermission g1 = builder().fromPermission(tcp)
.tenantIdGroupNamePair("tenant1", "group1").build();
final IpPermission g2 = builder().fromPermission(tcp)
.tenantIdGroupNamePair("tenant1", "group2").build();
final IpPermission g12 = builder().fromPermission(tcp)
.tenantIdGroupNamePair("tenant1", "group1")
.tenantIdGroupNamePair("tenant1", "group2").build();
final IpPermission g21 = builder().fromPermission(tcp)
.tenantIdGroupNamePair("tenant1", "group2")
.tenantIdGroupNamePair("tenant1", "group1").build();
final IpPermission t2g1 = builder().fromPermission(tcp)
.tenantIdGroupNamePair("tenant2", "group1").build();
assertTotalOrder(ImmutableList.of(tcp, g1, g12, g2, g21, t2g1));
final IpPermission g12b = builder().fromPermission(tcp)
.tenantIdGroupNamePair("tenant1", "group1")
.tenantIdGroupNamePair("tenant1", "group2").build();
assertEqualAndComparable(g12, g12b);
}
@Test
public void testCompareGroupIds() {
final IpPermission tcp = builder().ipProtocol(IpProtocol.TCP).build();
final IpPermission aa = builder().fromPermission(tcp)
.groupId("a").build();
final IpPermission a = builder().fromPermission(tcp)
.groupId("a").build();
final IpPermission ab = builder().fromPermission(tcp)
.groupId("a")
.groupId("b").build();
final IpPermission ba = builder().fromPermission(tcp)
.groupId("b")
.groupId("a").build();
assertTotalOrder(ImmutableList.of(tcp, a, ab, ba));
assertEqualAndComparable(a, aa);
}
@Test
public void testCompareCidrBlocks() {
final IpPermission tcp = builder().ipProtocol(IpProtocol.TCP).build();
final IpPermission everything = builder().fromPermission(tcp)
.cidrBlock("0.0.0.0/0").build();
final IpPermission universal = builder().fromPermission(tcp)
.cidrBlock("0.0.0.0/0").build();
assertEqualAndComparable(everything, universal);
final IpPermission localhost = builder().fromPermission(tcp)
.cidrBlock("127.0.0.1/32").build();
final IpPermission tenTwentyOne = builder().fromPermission(tcp)
.cidrBlock("10.0.0.21/32").build();
final IpPermission tenTwoHundred = builder().fromPermission(tcp)
.cidrBlock("10.0.0.200/32").build();
// comparison is alphabetic, not by numeric equivalent
assertOrder(tenTwoHundred, tenTwentyOne);
assertTotalOrder(ImmutableList.of(tcp, everything, tenTwoHundred, tenTwentyOne, localhost));
}
@Test
public void testCompareExclusionCidrBlocks() {
final IpPermission tcp = builder().ipProtocol(IpProtocol.TCP).build();
final IpPermission everything = builder().fromPermission(tcp)
.exclusionCidrBlock("0.0.0.0/0").build();
final IpPermission universal = builder().fromPermission(tcp)
.exclusionCidrBlock("0.0.0.0/0").build();
assertEqualAndComparable(everything, universal);
final IpPermission localhost = builder().fromPermission(tcp)
.exclusionCidrBlock("127.0.0.1/32").build();
final IpPermission stillLocal = builder().fromPermission(tcp)
.exclusionCidrBlock("127.0.0.1/32").build();
assertEqualAndComparable(localhost, stillLocal);
final IpPermission tenTwentyOne = builder().fromPermission(tcp)
.exclusionCidrBlock("10.0.0.21/32").build();
final IpPermission tenTwoHundred = builder().fromPermission(tcp)
.exclusionCidrBlock("10.0.0.200/32").build();
// comparison is alphabetic, not by numeric equivalent
assertOrder(tenTwoHundred, tenTwentyOne);
assertTotalOrder(ImmutableList.of(tcp, everything, tenTwoHundred, tenTwentyOne, localhost));
}
@Test
public void testPairwise() {
final IpPermission tcp = builder().ipProtocol(IpProtocol.TCP).build();
final IpPermission udp = builder().ipProtocol(IpProtocol.UDP).build();
final IpPermission f10 = builder().fromPermission(tcp).fromPort(10).build();
final IpPermission f20 = builder().fromPermission(tcp).fromPort(20).build();
final IpPermission u10 = builder().fromPermission(udp).fromPort(10).build();
final IpPermission t20 = builder().fromPermission(f10).toPort(20).build();
final IpPermission t30 = builder().fromPermission(f10).toPort(30).build();
final IpPermission t2g1 = builder().fromPermission(t20)
.tenantIdGroupNamePair("tenant1", "group1")
.build();
final IpPermission t2g2 = builder().fromPermission(t20)
.tenantIdGroupNamePair("tenant1", "group2")
.build();
final IpPermission gidA = builder().fromPermission(t2g1)
.groupId("groupA")
.build();
final IpPermission gidB = builder().fromPermission(t2g1)
.groupId("groupB")
.build();
final IpPermission cidr10 = builder().fromPermission(gidA)
.cidrBlock("10.10.10.10/32")
.build();
final IpPermission cidr20 = builder().fromPermission(gidA)
.cidrBlock("10.10.10.20/32")
.build();
final IpPermission ex10 = builder().fromPermission(cidr10)
.exclusionCidrBlock("172.16.10.10/32")
.build();
final IpPermission ex20 = builder().fromPermission(cidr10)
.exclusionCidrBlock("172.16.10.20/32")
.build();
assertTotalOrder(ImmutableList.of(
tcp,
f10,
t20,
t2g1,
gidA,
cidr10,
ex10,
ex20,
cidr20,
gidB,
t2g2,
t30,
f20,
udp,
u10
));
}
public static void assertEqualAndComparable(IpPermission first, IpPermission second) {
assertEquals(first, second, first + " does not equal " + second);
assertTrue(first.compareTo(second) == 0, first + " does not compare zero to " + second);
}
private static void assertOrder(IpPermission smaller, IpPermission bigger) {
assertTrue(smaller.compareTo(bigger) < 0, smaller + " does not compare less than " + bigger);
assertTrue(bigger.compareTo(smaller) > 0, bigger + " does not compare greater than " + smaller);
assertTrue(smaller.compareTo(smaller) == 0, smaller + " does not compare zero to itself");
assertTrue(bigger.compareTo(bigger) == 0, bigger + " does not compare zero to itself");
}
private static void assertTotalOrder(List<IpPermission> permissions) {
if (permissions.size() < 2) return;
IpPermission head = permissions.get(0);
List<IpPermission> tail = permissions.subList(1, permissions.size());
for (IpPermission perm : tail) {
assertOrder(head, perm);
}
assertTotalOrder(tail);
}
}