blob: 8ca78cfa56890fe677bc3b0c084623f0d5e614eb [file] [log] [blame]
Carmelo Cascone58136812018-07-19 03:40:16 +02001/*
2 * Copyright 2018-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.net.pi.impl;
18
19import com.google.common.collect.ImmutableList;
20import com.google.common.collect.ImmutableSet;
21import com.google.common.testing.EqualsTester;
22import org.junit.Test;
23import org.onosproject.TestApplicationId;
24import org.onosproject.core.ApplicationId;
25import org.onosproject.core.GroupId;
26import org.onosproject.net.DeviceId;
27import org.onosproject.net.PortNumber;
28import org.onosproject.net.flow.DefaultTrafficTreatment;
29import org.onosproject.net.flow.TrafficTreatment;
30import org.onosproject.net.group.DefaultGroup;
31import org.onosproject.net.group.DefaultGroupBucket;
32import org.onosproject.net.group.DefaultGroupDescription;
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -070033import org.onosproject.net.group.DefaultGroupKey;
Carmelo Cascone58136812018-07-19 03:40:16 +020034import org.onosproject.net.group.Group;
35import org.onosproject.net.group.GroupBucket;
36import org.onosproject.net.group.GroupBuckets;
37import org.onosproject.net.group.GroupDescription;
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -070038import org.onosproject.net.group.GroupKey;
39import org.onosproject.net.pi.runtime.PiCloneSessionEntry;
Carmelo Cascone58136812018-07-19 03:40:16 +020040import org.onosproject.net.pi.runtime.PiMulticastGroupEntry;
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -070041import org.onosproject.net.pi.runtime.PiPreEntry;
Carmelo Cascone58136812018-07-19 03:40:16 +020042import org.onosproject.net.pi.runtime.PiPreReplica;
43
44import java.util.List;
45import java.util.Set;
46
47import static org.onosproject.net.group.GroupDescription.Type.ALL;
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -070048import static org.onosproject.net.group.GroupDescription.Type.CLONE;
Carmelo Cascone58136812018-07-19 03:40:16 +020049
50/**
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -070051 * Test for {@link PiReplicationGroupTranslatorImpl}.
Carmelo Cascone58136812018-07-19 03:40:16 +020052 */
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -070053public class PiReplicationGroupTranslatorImplTest {
Carmelo Cascone58136812018-07-19 03:40:16 +020054 private static final DeviceId DEVICE_ID = DeviceId.deviceId("device:dummy:1");
55 private static final ApplicationId APP_ID = TestApplicationId.create("dummy");
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -070056 private static final int ENTRY_ID = 99;
57 private static final GroupId GROUP_ID = GroupId.valueOf(ENTRY_ID);
58 private static final GroupKey GROUP_KEY = new DefaultGroupKey(
59 String.valueOf(GROUP_ID.id()).getBytes());
Carmelo Cascone58136812018-07-19 03:40:16 +020060
61 private static final List<GroupBucket> BUCKET_LIST = ImmutableList.of(
62 allOutputBucket(1),
63 allOutputBucket(2),
64 allOutputBucket(3));
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -070065 private static final List<GroupBucket> CLONE_BUCKET_LIST = ImmutableList.of(
66 cloneOutputBucket(1),
67 cloneOutputBucket(2),
68 cloneOutputBucket(3));
Carmelo Cascone58136812018-07-19 03:40:16 +020069 private static final List<GroupBucket> BUCKET_LIST_2 = ImmutableList.of(
70 allOutputBucket(1),
71 allOutputBucket(2),
72 allOutputBucket(2),
73 allOutputBucket(3),
74 allOutputBucket(3));
75
76 private static final Set<PiPreReplica> REPLICAS = ImmutableSet.of(
Carmelo Cascone87675112020-08-04 17:19:40 -070077 new PiPreReplica(PortNumber.portNumber(1), 0),
78 new PiPreReplica(PortNumber.portNumber(2), 0),
79 new PiPreReplica(PortNumber.portNumber(3), 0));
Carmelo Cascone58136812018-07-19 03:40:16 +020080 private static final Set<PiPreReplica> REPLICAS_2 = ImmutableSet.of(
Carmelo Cascone87675112020-08-04 17:19:40 -070081 new PiPreReplica(PortNumber.portNumber(1), 0),
82 new PiPreReplica(PortNumber.portNumber(2), 0),
Carmelo Cascone58136812018-07-19 03:40:16 +020083 new PiPreReplica(PortNumber.portNumber(2), 1),
Carmelo Cascone87675112020-08-04 17:19:40 -070084 new PiPreReplica(PortNumber.portNumber(3), 0),
85 new PiPreReplica(PortNumber.portNumber(3), 1));
Carmelo Cascone58136812018-07-19 03:40:16 +020086
87 private static final PiMulticastGroupEntry PI_MULTICAST_GROUP =
88 PiMulticastGroupEntry.builder()
89 .withGroupId(GROUP_ID.id())
90 .addReplicas(REPLICAS)
91 .build();
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -070092 private static final PiCloneSessionEntry PI_CLONE_SESSION_ENTRY =
93 PiCloneSessionEntry.builder()
94 .withSessionId(ENTRY_ID)
95 .addReplicas(REPLICAS)
96 .build();
Carmelo Cascone58136812018-07-19 03:40:16 +020097 private static final PiMulticastGroupEntry PI_MULTICAST_GROUP_2 =
98 PiMulticastGroupEntry.builder()
99 .withGroupId(GROUP_ID.id())
100 .addReplicas(REPLICAS_2)
101 .build();
102
103 private static final GroupBuckets BUCKETS = new GroupBuckets(BUCKET_LIST);
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -0700104 private static final GroupBuckets CLONE_BUCKETS = new GroupBuckets(CLONE_BUCKET_LIST);
Carmelo Cascone58136812018-07-19 03:40:16 +0200105 private static final GroupBuckets BUCKETS_2 = new GroupBuckets(BUCKET_LIST_2);
106
107 private static final GroupDescription ALL_GROUP_DESC = new DefaultGroupDescription(
108 DEVICE_ID, ALL, BUCKETS, GROUP_KEY, GROUP_ID.id(), APP_ID);
109 private static final Group ALL_GROUP = new DefaultGroup(GROUP_ID, ALL_GROUP_DESC);
110
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -0700111 private static final GroupDescription CLONE_GROUP_DESC = new DefaultGroupDescription(
112 DEVICE_ID, CLONE, CLONE_BUCKETS, GROUP_KEY, GROUP_ID.id(), APP_ID);
113 private static final Group CLONE_GROUP = new DefaultGroup(GROUP_ID, CLONE_GROUP_DESC);
114
Carmelo Cascone58136812018-07-19 03:40:16 +0200115 private static final GroupDescription ALL_GROUP_DESC_2 = new DefaultGroupDescription(
116 DEVICE_ID, ALL, BUCKETS_2, GROUP_KEY, GROUP_ID.id(), APP_ID);
117 private static final Group ALL_GROUP_2 = new DefaultGroup(GROUP_ID, ALL_GROUP_DESC_2);
118
119
120 private static GroupBucket allOutputBucket(int portNum) {
121 TrafficTreatment treatment = DefaultTrafficTreatment.builder()
122 .setOutput(PortNumber.portNumber(portNum))
123 .build();
124 return DefaultGroupBucket.createAllGroupBucket(treatment);
125 }
126
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -0700127 private static GroupBucket cloneOutputBucket(int portNum) {
128 TrafficTreatment treatment = DefaultTrafficTreatment.builder()
129 .setOutput(PortNumber.portNumber(portNum))
130 .build();
131 return DefaultGroupBucket.createCloneGroupBucket(treatment);
132 }
133
Carmelo Cascone58136812018-07-19 03:40:16 +0200134 @Test
135 public void testTranslatePreGroups() throws Exception {
136
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -0700137 PiPreEntry multicastGroup = PiReplicationGroupTranslatorImpl
Carmelo Cascone1e8843f2018-07-19 19:01:12 +0200138 .translate(ALL_GROUP, null, null);
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -0700139 PiPreEntry multicastGroup2 = PiReplicationGroupTranslatorImpl
Carmelo Cascone1e8843f2018-07-19 19:01:12 +0200140 .translate(ALL_GROUP_2, null, null);
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -0700141 PiPreEntry cloneSessionEntry = PiReplicationGroupTranslatorImpl
142 .translate(CLONE_GROUP, null, null);
Carmelo Cascone58136812018-07-19 03:40:16 +0200143
144 new EqualsTester()
145 .addEqualityGroup(multicastGroup, PI_MULTICAST_GROUP)
146 .addEqualityGroup(multicastGroup2, PI_MULTICAST_GROUP_2)
Carmelo Cascone9db4d5c2019-04-16 17:36:33 -0700147 .addEqualityGroup(cloneSessionEntry, PI_CLONE_SESSION_ENTRY)
Carmelo Cascone58136812018-07-19 03:40:16 +0200148 .testEquals();
149 }
150}