Cleanup
[nonrtric.git] / policy-agent / src / test / java / org / oransc / policyagent / ApplicationTest.java
1 /*-
2  * ========================LICENSE_START=================================
3  * O-RAN-SC
4  * %%
5  * Copyright (C) 2019 Nordix Foundation
6  * %%
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ========================LICENSE_END===================================
19  */
20
21 package org.oransc.policyagent;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.junit.Assert.assertFalse;
25
26 import java.net.URL;
27 import java.util.Vector;
28 import org.junit.Test;
29 import org.junit.runner.RunWith;
30 import org.oransc.policyagent.configuration.ApplicationConfig;
31 import org.oransc.policyagent.configuration.ImmutableRicConfig;
32 import org.oransc.policyagent.configuration.RicConfig;
33 import org.oransc.policyagent.exceptions.ServiceException;
34 import org.oransc.policyagent.repository.ImmutablePolicy;
35 import org.oransc.policyagent.repository.ImmutablePolicyType;
36 import org.oransc.policyagent.repository.Policies;
37 import org.oransc.policyagent.repository.Policy;
38 import org.oransc.policyagent.repository.PolicyType;
39 import org.oransc.policyagent.repository.PolicyTypes;
40 import org.oransc.policyagent.repository.Ric;
41 import org.oransc.policyagent.repository.Rics;
42 import org.springframework.beans.factory.annotation.Autowired;
43 import org.springframework.boot.test.context.SpringBootTest;
44 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
45 import org.springframework.boot.test.context.TestConfiguration;
46 import org.springframework.boot.web.server.LocalServerPort;
47 import org.springframework.context.annotation.Bean;
48 import org.springframework.http.HttpStatus;
49 import org.springframework.http.ResponseEntity;
50 import org.springframework.test.context.junit4.SpringRunner;
51 import org.springframework.web.client.RestTemplate;
52
53 @RunWith(SpringRunner.class)
54 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
55 public class ApplicationTest {
56
57     @Autowired
58     private Beans beans;
59
60     static class MockApplicationConfig extends ApplicationConfig {
61         @Override
62         public void initialize() {
63             URL url = MockApplicationConfig.class.getClassLoader().getResource("test_application_configuration.json");
64             loadConfigurationFromFile(url.getFile());
65         }
66     }
67
68     @TestConfiguration
69     static class Beans {
70         @Bean
71         public Rics getRics() {
72             return new Rics();
73         }
74
75         @Bean
76         public Policies getPolicies() {
77             return new Policies();
78         }
79
80         @Bean
81         public PolicyTypes getPolicyTypes() {
82             return new PolicyTypes();
83         }
84
85         @Bean
86         public ApplicationConfig getApplicationConfig() {
87             return new MockApplicationConfig();
88         }
89     }
90
91     @LocalServerPort
92     private int port;
93
94     private RestTemplate restTemplate = new RestTemplate();
95
96     @Test
97     public void getRics() throws Exception {
98         String cmd = "/rics";
99         String rsp = this.restTemplate.getForObject("http://localhost:" + port + cmd, String.class);
100         assertThat(rsp).contains("kista_1");
101     }
102
103     @Test
104     public void getRic() throws Exception {
105         String cmd = "/ric?managedElementId=kista_1";
106         String rsp = this.restTemplate.getForObject("http://localhost:" + port + cmd, String.class);
107         assertThat(rsp).isEqualTo("ric1");
108     }
109
110     // managedElmentId -> nodeName
111
112     @Test
113     public void putPolicy() throws Exception {
114         String url = "http://localhost:" + port + "/policy?type=type1&instance=instance1&ric=ric1&service=service1";
115         String json = "{}";
116         addPolicyType("type1");
117         addRic(beans.getRics(), "ric1", url);
118
119         this.restTemplate.put(url, json);
120
121         Policy policy = beans.getPolicies().get("instance1");
122
123         assertThat(policy).isNotNull();
124         assertThat(policy.id()).isEqualTo("instance1");
125         assertThat(policy.ownerServiceName()).isEqualTo("service1");
126     }
127
128     private void addRic(Rics rics, String ric, String url) {
129         Vector<String> nodeNames = new Vector<>(1);
130         nodeNames.add("node1");
131         RicConfig ricConfig = ImmutableRicConfig.builder() //
132             .name(ric) //
133             .baseUrl(url) //
134             .managedElementIds(nodeNames) //
135             .build();
136         Ric ricObj = new Ric(ricConfig);
137
138         rics.put(ricObj);
139     }
140
141     private PolicyType addPolicyType(String name) {
142         PolicyType type = ImmutablePolicyType.builder() //
143             .jsonSchema("") //
144             .name(name) //
145             .build();
146
147         beans.getPolicyTypes().put(type);
148         return type;
149     }
150
151     private Policy addPolicy(String id, String typeName, String service) throws ServiceException {
152         Policy p = ImmutablePolicy.builder().id(id) //
153             .json("{}") //
154             .ownerServiceName(service) //
155             .ric(beans.getRics().getRic("ric1")) //
156             .type(addPolicyType(typeName)) //
157             .build();
158         beans.getPolicies().put(p);
159         return p;
160     }
161
162     @Test
163     public void getPolicy() throws Exception {
164         String url = "http://localhost:" + port + "/policy?instance=id";
165         Policy policy = addPolicy("id", "typeName", "service1");
166         {
167             String rsp = this.restTemplate.getForObject(url, String.class);
168             assertThat(rsp).isEqualTo(policy.json());
169         }
170         {
171             beans.getPolicies().remove(policy);
172             ResponseEntity<String> rsp = this.restTemplate.getForEntity(url, String.class);
173             assertThat(rsp.getStatusCodeValue()).isEqualTo(HttpStatus.NO_CONTENT.value());
174         }
175     }
176
177     @Test
178     public void getPolicies() throws Exception {
179         String url = "http://localhost:" + port + "/policies";
180         addRic(beans.getRics(), "ric1", url);
181         addPolicy("id1", "type1", "service1");
182         addPolicy("id2", "type2", "service2");
183
184         String rsp = this.restTemplate.getForObject(url, String.class);
185         System.out.println(rsp);
186         assertThat(rsp).contains("id1");
187         assertThat(rsp).contains("id2");
188     }
189
190     @Test
191     public void getPoliciesFilter() throws Exception {
192         addPolicy("id1", "type1", "service1");
193         addPolicy("id2", "type1", "service2");
194         addPolicy("id3", "type2", "service1");
195
196         String url = "http://localhost:" + port + "/policies?type=type1";
197         String rsp = this.restTemplate.getForObject(url, String.class);
198         System.out.println(rsp);
199         assertThat(rsp).contains("id1");
200         assertThat(rsp).contains("id2");
201         assertFalse(rsp.contains("id3"));
202
203         url = "http://localhost:" + port + "/policies?type=type1&service=service2";
204         rsp = this.restTemplate.getForObject(url, String.class);
205         System.out.println(rsp);
206         assertFalse(rsp.contains("id1"));
207         assertThat(rsp).contains("id2");
208         assertFalse(rsp.contains("id3"));
209
210     }
211
212 }