blob: 6f7ed96b1dcbf07a6e8305f422ef220ebe66ab92 [file] [log] [blame]
Yi Tseng0f1ffd12020-09-18 11:10:47 -07001/*
2 * Copyright 2020-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 */
16package org.onosproject.inbandtelemetry.impl;
17
18
19import com.fasterxml.jackson.databind.ObjectMapper;
20import com.fasterxml.jackson.databind.node.JsonNodeFactory;
21import com.google.common.collect.ImmutableList;
22import org.easymock.Capture;
23import org.easymock.EasyMock;
24import org.junit.After;
25import org.junit.Before;
26import org.junit.Test;
27import org.onlab.packet.IpAddress;
28import org.onlab.packet.TpPort;
29import org.onosproject.TestApplicationId;
30import org.onosproject.core.ApplicationId;
31import org.onosproject.core.CoreService;
32import org.onosproject.mastership.MastershipService;
33import org.onosproject.net.behaviour.inbandtelemetry.IntReportConfig;
34import org.onosproject.net.behaviour.inbandtelemetry.IntDeviceConfig;
35import org.onosproject.net.config.ConfigApplyDelegate;
36import org.onosproject.net.config.NetworkConfigEvent;
37import org.onosproject.net.config.NetworkConfigListener;
38import org.onosproject.net.config.NetworkConfigRegistry;
39import org.onosproject.net.config.NetworkConfigService;
40import org.onosproject.net.device.DeviceService;
41import org.onosproject.net.host.HostService;
42import org.onosproject.store.service.StorageService;
43import org.onosproject.store.service.TestStorageService;
44
45import static org.easymock.EasyMock.anyObject;
46import static org.easymock.EasyMock.createNiceMock;
47import static org.easymock.EasyMock.expect;
48import static org.easymock.EasyMock.expectLastCall;
49import static org.easymock.EasyMock.newCapture;
50import static org.easymock.EasyMock.replay;
51import static org.junit.Assert.assertEquals;
52import static org.onlab.junit.TestUtils.setField;
53
54public class SimpleIntManagerTest {
55 private static final String APP_NAME = "org.onosproject.inbandtelemetry";
56 private static final ApplicationId APP_ID = new TestApplicationId(APP_NAME);
57 private static final IpAddress COLLECTOR_IP = IpAddress.valueOf("10.0.0.1");
58 private static final TpPort COLLECTOR_PORT = TpPort.tpPort(5500);
59 private static final int MIN_FLOW_HOP_LATENCY_CHANGE_NS = 16;
60
61 private SimpleIntManager manager;
62 private StorageService storageService;
63 private MastershipService mastershipService;
64 private CoreService coreService;
65 private HostService hostService;
66 private DeviceService deviceService;
67 private NetworkConfigRegistry networkConfigRegistry;
68 private NetworkConfigService networkConfigService;
69 private NetworkConfigListener networkConfigListener;
70
71
72 @Before
73 public void setup() {
74 storageService = new TestStorageService();
75 mastershipService = createNiceMock(MastershipService.class);
76 coreService = createNiceMock(CoreService.class);
77 hostService = createNiceMock(HostService.class);
78 deviceService = createNiceMock(DeviceService.class);
79 expect(deviceService.getDevices()).andReturn(ImmutableList.of()).anyTimes();
80 networkConfigRegistry = createNiceMock(NetworkConfigRegistry.class);
81 networkConfigService = createNiceMock(NetworkConfigService.class);
82
83 manager = new SimpleIntManager();
84 setField(manager, "coreService", coreService);
85 setField(manager, "deviceService", deviceService);
86 setField(manager, "storageService", storageService);
87 setField(manager, "mastershipService", mastershipService);
88 setField(manager, "hostService", hostService);
89 setField(manager, "netcfgService", networkConfigService);
90 setField(manager, "netcfgRegistry", networkConfigRegistry);
91
92 expect(coreService.registerApplication(APP_NAME)).andReturn(APP_ID).once();
93 networkConfigRegistry.registerConfigFactory(anyObject());
94 expectLastCall().once();
95
96 Capture<NetworkConfigListener> capture = newCapture();
97 networkConfigService.addListener(EasyMock.capture(capture));
98 expectLastCall().once();
99 replay(mastershipService, deviceService, coreService,
100 hostService, networkConfigRegistry, networkConfigService);
101 manager.activate();
102 networkConfigListener = capture.getValue();
103 }
104
105 @After
106 public void teardown() {
107 manager.deactivate();
108 }
109
110 @Test
111 public void testPushIntAppConfig() {
112 IntReportConfig config = new IntReportConfig();
113 ObjectMapper mapper = new ObjectMapper();
114 ConfigApplyDelegate delegate = configApply -> { };
115 config.init(APP_ID, "report", JsonNodeFactory.instance.objectNode(), mapper, delegate);
116 config.setCollectorIp(COLLECTOR_IP)
117 .setCollectorPort(COLLECTOR_PORT)
118 .setMinFlowHopLatencyChangeNs(MIN_FLOW_HOP_LATENCY_CHANGE_NS);
119
120 NetworkConfigEvent event =
121 new NetworkConfigEvent(NetworkConfigEvent.Type.CONFIG_ADDED, APP_ID,
122 config, null, IntReportConfig.class);
123 networkConfigListener.event(event);
124
125 // We expected that the manager will store the device config which
126 // converted from the app config.
127 IntDeviceConfig deviceConfig = manager.getConfig();
128 assertEquals(COLLECTOR_IP, deviceConfig.collectorIp());
129 assertEquals(COLLECTOR_PORT, deviceConfig.collectorPort());
130 assertEquals(MIN_FLOW_HOP_LATENCY_CHANGE_NS, deviceConfig.minFlowHopLatencyChangeNs());
131 }
132}