T-API notification JUnit test
[transportpce.git] / nbinotifications / src / test / java / org / opendaylight / transportpce / nbinotifications / utils / NotificationServiceDataUtils.java
1 /*
2  * Copyright © 2020 Orange, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.transportpce.nbinotifications.utils;
9
10 import java.nio.charset.Charset;
11 import java.time.OffsetDateTime;
12 import java.time.ZoneOffset;
13 import java.time.format.DateTimeFormatter;
14 import java.util.HashMap;
15 import java.util.HashSet;
16 import java.util.List;
17 import java.util.Map;
18 import java.util.UUID;
19 import java.util.concurrent.ExecutionException;
20 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
21 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
22 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirection;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionBuilder;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionKey;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirection;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.lgx.LgxBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
34 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
35 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessServiceBuilder;
36 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService;
37 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmServiceBuilder;
38 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService;
39 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessServiceBuilder;
40 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
41 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
42 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
43 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context;
44 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ContextBuilder;
45 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.DateAndTime;
46 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
47 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
48 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
49 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.Name;
50 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.NameBuilder;
51 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1;
52 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1Builder;
53 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContextBuilder;
54 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceInputBuilder;
55 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListInputBuilder;
56 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NotificationType;
57 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.ObjectType;
58 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.SubscriptionState;
59 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.context.NotificationContextBuilder;
60 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilter;
61 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilterBuilder;
62 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification;
63 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.NotificationBuilder;
64 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes;
65 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder;
66 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName;
67 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameBuilder;
68 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContextBuilder;
69 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.NwTopologyServiceBuilder;
70 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
71 import org.opendaylight.yangtools.yang.common.Uint32;
72 import org.opendaylight.yangtools.yang.common.Uint8;
73
74 public final class NotificationServiceDataUtils {
75
76     public static final String TAPI_CONTEXT = "T-API context";
77
78     private NotificationServiceDataUtils() {
79     }
80
81     public static NotificationProcessService buildSendEventInput() {
82         return new NotificationProcessServiceBuilder()
83                 .setMessage("message")
84                 .setServiceName("service1")
85                 .setOperationalState(State.InService)
86                 .setResponseFailed("")
87                 .setCommonId("commond-id")
88                 .setConnectionType(ConnectionType.Service)
89                 .setServiceZEnd(getServiceZEndBuild().build())
90                 .setServiceAEnd(getServiceAEndBuild().build())
91                 .build();
92     }
93
94     public static NotificationsProcessService buildReceivedEvent() {
95         return new NotificationsProcessServiceBuilder()
96                 .setMessage("message")
97                 .setServiceName("service1")
98                 .setOperationalState(State.InService)
99                 .setResponseFailed("")
100                 .setCommonId("commond-id")
101                 .setConnectionType(ConnectionType.Service)
102                 .setServiceZEnd(getServiceZEndBuild().build())
103                 .setServiceAEnd(getServiceAEndBuild().build())
104                 .build();
105     }
106
107     public static NotificationsAlarmService buildReceivedAlarmEvent() {
108         return new NotificationsAlarmServiceBuilder()
109                 .setMessage("message")
110                 .setServiceName("service1")
111                 .setOperationalState(State.InService)
112                 .setConnectionType(ConnectionType.Service)
113                 .build();
114     }
115
116     public static Notification buildReceivedTapiAlarmEvent() {
117         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
118         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
119         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
120         Uuid targetObjectId = new Uuid(UUID.randomUUID().toString());
121         TargetObjectName objectName = new TargetObjectNameBuilder()
122             .setValue(targetObjectId.getValue())
123             .setValueName("Connectivity Service Name")
124             .build();
125         ChangedAttributes adminStateChange = new ChangedAttributesBuilder()
126             .setValueName("administrativeState")
127             .setOldValue(AdministrativeState.LOCKED.getName())
128             .setNewValue(AdministrativeState.UNLOCKED.getName())
129             .build();
130         ChangedAttributes operStateChange = new ChangedAttributesBuilder()
131             .setValueName("operationalState")
132             .setOldValue(OperationalState.DISABLED.getName())
133             .setNewValue(OperationalState.ENABLED.getName())
134             .build();
135         return new NotificationBuilder()
136             .setNotificationType(NotificationType.ATTRIBUTEVALUECHANGE)
137             .setLayerProtocolName(LayerProtocolName.ETH)
138             .setTargetObjectType(ObjectType.CONNECTIVITYSERVICE)
139             .setEventTimeStamp(datetime)
140             .setUuid(new Uuid(UUID.randomUUID().toString()))
141             .setTargetObjectIdentifier(targetObjectId)
142             .setTargetObjectName(Map.of(objectName.key(), objectName))
143             .setChangedAttributes(Map.of(adminStateChange.key(), adminStateChange,
144                 operStateChange.key(), operStateChange))
145             .build();
146     }
147
148     public static ServiceAEndBuilder getServiceAEndBuild() {
149         return new ServiceAEndBuilder()
150                 .setClli("clli")
151                 .setServiceFormat(ServiceFormat.OC)
152                 .setServiceRate(Uint32.valueOf(1))
153                 .setNodeId(new NodeIdType("XPONDER-1-2"))
154                 .setTxDirection(getTxDirection())
155                 .setRxDirection(getRxDirection());
156     }
157
158     public static ServiceZEndBuilder getServiceZEndBuild() {
159         return new ServiceZEndBuilder()
160                 .setClli("clli")
161                 .setServiceFormat(ServiceFormat.OC)
162                 .setServiceRate(Uint32.valueOf(1))
163                 .setNodeId(new NodeIdType("XPONDER-1-2"))
164                 .setTxDirection(getTxDirection())
165                 .setRxDirection(getRxDirection());
166     }
167
168     public static CreateNotificationSubscriptionServiceInputBuilder buildNotificationSubscriptionServiceInputBuilder() {
169         Name name = new NameBuilder()
170             .setValue("test subscription")
171             .setValueName("Subscription name")
172             .build();
173         SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder()
174             .setRequestedObjectTypes(new HashSet<>(List.of(ObjectType.CONNECTIVITYSERVICE)))
175             .setRequestedNotificationTypes(new HashSet<>(List.of(NotificationType.ALARMEVENT)))
176             .setRequestedLayerProtocols(new HashSet<>(List.of(LayerProtocolName.ETH)))
177             .setRequestedObjectIdentifier(new HashSet<>(List.of(new Uuid(UUID.randomUUID().toString()))))
178             .setIncludeContent(true)
179             .setLocalId("localId")
180             .setName(Map.of(name.key(), name))
181             .build();
182         return new CreateNotificationSubscriptionServiceInputBuilder()
183             .setSubscriptionFilter(subscriptionFilter)
184             .setSubscriptionState(SubscriptionState.ACTIVE);
185     }
186
187     private static Map<TxDirectionKey, TxDirection> getTxDirection() {
188         return Map.of(new TxDirectionKey(Uint8.ZERO), new TxDirectionBuilder()
189                 .setPort(new PortBuilder()
190                         .setPortDeviceName("device name")
191                         .setPortName("port name")
192                         .setPortRack("port rack")
193                         .setPortShelf("port shelf")
194                         .setPortSlot("port slot")
195                         .setPortSubSlot("port subslot")
196                         .setPortType("port type")
197                         .build())
198                 .setLgx(new LgxBuilder()
199                         .setLgxDeviceName("lgx device name")
200                         .setLgxPortName("lgx port name")
201                         .setLgxPortRack("lgx port rack")
202                         .setLgxPortShelf("lgx port shelf")
203                         .build())
204                 .setIndex(Uint8.ZERO)
205                 .build());
206     }
207
208     private static Map<RxDirectionKey, RxDirection> getRxDirection() {
209         return Map.of(new RxDirectionKey(Uint8.ZERO), new RxDirectionBuilder()
210                 .setPort(new PortBuilder()
211                         .setPortDeviceName("device name")
212                         .setPortName("port name")
213                         .setPortRack("port rack")
214                         .setPortShelf("port shelf")
215                         .setPortSlot("port slot")
216                         .setPortSubSlot("port subslot")
217                         .setPortType("port type")
218                         .build())
219                 .setLgx(new LgxBuilder()
220                         .setLgxDeviceName("lgx device name")
221                         .setLgxPortName("lgx port name")
222                         .setLgxPortRack("lgx port rack")
223                         .setLgxPortShelf("lgx port shelf")
224                         .build())
225                 .setIndex(Uint8.ZERO)
226                 .build());
227     }
228
229     public static void createTapiContext(
230             NetworkTransactionService networkTransactionService) throws ExecutionException, InterruptedException {
231         // Augmenting tapi context to include topology and connectivity contexts
232         org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name contextName
233             = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder()
234             .setValue(TAPI_CONTEXT).setValueName("TAPI Context Name").build();
235
236         Context1 connectivityContext =
237             new Context1Builder()
238                 .setConnectivityContext(
239                     new ConnectivityContextBuilder()
240                         .setConnection(new HashMap<>())
241                         .setConnectivityService(new HashMap<>())
242                         .build())
243                 .build();
244
245         org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name nwTopoServiceName =
246             new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder()
247                 .setValue("Network Topo Service")
248                 .setValueName("Network Topo Service Name")
249                 .build();
250
251         org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1 topologyContext
252             = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1Builder()
253             .setTopologyContext(new TopologyContextBuilder()
254                 .setNwTopologyService(new NwTopologyServiceBuilder()
255                     .setTopology(new HashMap<>())
256                     .setUuid(
257                         new Uuid(
258                             UUID.nameUUIDFromBytes("Network Topo Service".getBytes(Charset.forName("UTF-8")))
259                                 .toString()))
260                     .setName(Map.of(nwTopoServiceName.key(), nwTopoServiceName))
261                     .build())
262                 .setTopology(new HashMap<>())
263                 .build())
264             .build();
265
266         org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1 notificationContext
267             = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1Builder()
268             .setNotificationContext(new NotificationContextBuilder()
269                 .setNotification(new HashMap<>())
270                 .setNotifSubscription(new HashMap<>())
271                 .build())
272             .build();
273
274         ContextBuilder contextBuilder = new ContextBuilder()
275             .setName(Map.of(contextName.key(), contextName))
276             .setUuid(
277                 new Uuid(UUID.nameUUIDFromBytes(TAPI_CONTEXT.getBytes(Charset.forName("UTF-8"))).toString()))
278             .setServiceInterfacePoint(new HashMap<>())
279             .addAugmentation(connectivityContext)
280             .addAugmentation(topologyContext)
281             .addAugmentation(notificationContext);
282
283         // todo: add notification context
284         InstanceIdentifier<Context> contextIID = InstanceIdentifier.builder(Context.class).build();
285         // put in datastore
286         networkTransactionService.put(LogicalDatastoreType.OPERATIONAL, contextIID, contextBuilder.build());
287         networkTransactionService.commit().get();
288     }
289
290     public static GetNotificationListInputBuilder buildGetNotificationListInputBuilder(String subscriptionUuid) {
291         return new GetNotificationListInputBuilder()
292                 .setSubscriptionIdOrName(subscriptionUuid)
293                 .setTimePeriod("some string");
294     }
295 }