blob: f8b5d145bda3262bed81f93af5372daf8520144d [file] [log] [blame]
Jian Li073f1ba2021-02-28 03:50:15 +09001/*
2 * Copyright 2021-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.kubevirtnetworking.codec;
17
18import com.fasterxml.jackson.databind.JsonNode;
19import com.fasterxml.jackson.databind.node.ObjectNode;
20import org.hamcrest.MatcherAssert;
21import org.junit.Before;
22import org.junit.Test;
23import org.onlab.packet.IpAddress;
24import org.onosproject.codec.JsonCodec;
25import org.onosproject.codec.impl.MockCodecContext;
26import org.onosproject.core.CoreService;
27import org.onosproject.kubevirtnetworking.api.DefaultKubevirtFloatingIp;
28import org.onosproject.kubevirtnetworking.api.KubevirtFloatingIp;
29
30import java.io.IOException;
31import java.io.InputStream;
32
33import static junit.framework.TestCase.assertEquals;
34import static org.easymock.EasyMock.createMock;
35import static org.easymock.EasyMock.expect;
36import static org.easymock.EasyMock.replay;
37import static org.hamcrest.MatcherAssert.assertThat;
38import static org.hamcrest.Matchers.notNullValue;
39import static org.onosproject.kubevirtnetworking.codec.KubevirtFloatingIpJsonMatcher.matchesKubevirtFloatingIp;
40import static org.onosproject.net.NetTestTools.APP_ID;
41
42/**
43 * Unit tests for KubevirtFloatingIp codec.
44 */
45public final class KubevirtFloatingIpCodecTest {
46
47 MockCodecContext context;
48
49 JsonCodec<KubevirtFloatingIp> kubevirtFloatingIpCodec;
50
51 final CoreService mockCoreService = createMock(CoreService.class);
52 private static final String REST_APP_ID = "org.onosproject.rest";
53
54 @Before
55 public void setUp() {
56 context = new MockCodecContext();
57 kubevirtFloatingIpCodec = new KubevirtFloatingIpCodec();
58
59 assertThat(kubevirtFloatingIpCodec, notNullValue());
60 expect(mockCoreService.registerApplication(REST_APP_ID))
61 .andReturn(APP_ID).anyTimes();
62 replay(mockCoreService);
63 context.registerService(CoreService.class, mockCoreService);
64 }
65
66 /**
67 * Tests the kubevirt floating IP encoding.
68 */
69 @Test
70 public void testKubevirtFloatingIpEncode() {
71 KubevirtFloatingIp floatingIp = DefaultKubevirtFloatingIp.builder()
72 .id("fip-id")
73 .routerName("router-1")
Jian Lib636f702021-03-03 14:46:50 +090074 .networkName("flat-1")
Jian Li073f1ba2021-02-28 03:50:15 +090075 .floatingIp(IpAddress.valueOf("10.10.10.10"))
76 .podName("pod-1")
77 .fixedIp(IpAddress.valueOf("20.20.20.20"))
78 .build();
79
80 ObjectNode floatingIpJson = kubevirtFloatingIpCodec.encode(floatingIp, context);
81 assertThat(floatingIpJson, matchesKubevirtFloatingIp(floatingIp));
82 }
83
84 @Test
85 public void testKubevirtFloatingIpDecode() throws IOException {
86 KubevirtFloatingIp floatingIp = getKubevirtFloatingIp("KubevirtFloatingIp.json");
87
88 assertEquals("fip-1", floatingIp.id());
89 assertEquals("router-1", floatingIp.routerName());
Jian Lib636f702021-03-03 14:46:50 +090090 assertEquals("flat-1", floatingIp.networkName());
Jian Li073f1ba2021-02-28 03:50:15 +090091 assertEquals("10.10.10.10", floatingIp.floatingIp().toString());
92 assertEquals("pod-1", floatingIp.podName());
93 assertEquals("20.20.20.20", floatingIp.fixedIp().toString());
94 }
95
96 private KubevirtFloatingIp getKubevirtFloatingIp(String resourceName) throws IOException {
97 InputStream jsonStream = KubevirtFloatingIpCodecTest.class.getResourceAsStream(resourceName);
98 JsonNode json = context.mapper().readTree(jsonStream);
99 MatcherAssert.assertThat(json, notNullValue());
100 KubevirtFloatingIp fip = kubevirtFloatingIpCodec.decode((ObjectNode) json, context);
101 assertThat(fip, notNullValue());
102 return fip;
103 }
104}