* limitations under the License.
* ========================LICENSE_END===================================
*/
+
package org.oransc.policyagent;
import com.google.gson.JsonObject;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Vector;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.oransc.policyagent.clients.A1Client;
import org.oransc.policyagent.configuration.ApplicationConfig;
import org.oransc.policyagent.repository.ImmutablePolicyType;
import org.oransc.policyagent.repository.Policies;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.context.annotation.Bean;
-import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import reactor.core.publisher.Mono;
-@RunWith(SpringRunner.class)
+@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT)
public class MockPolicyAgent {
private PolicyTypes policyTypes;
static class MockApplicationConfig extends ApplicationConfig {
+
@Override
public void initialize() {
URL url = MockApplicationConfig.class.getClassLoader().getResource("test_application_configuration.json");
}
}
+ private static class RicPolicyDatabase {
+ private Map<String, Map<String, String>> policies = new HashMap<>();
+
+ public void putPolicy(String nearRtRicUrl, String policyId, String policyString) {
+ getPolicies(nearRtRicUrl).put(policyId, policyString);
+ }
+
+ public Collection<String> getPolicyIdentities(String nearRtRicUrl) {
+ return getPolicies(nearRtRicUrl).keySet();
+ }
+
+ public void deletePolicy(String nearRtRicUrl, String policyId) {
+ getPolicies(nearRtRicUrl).remove(policyId);
+ }
+
+ private Map<String, String> getPolicies(String nearRtRicUrl) {
+ if (!policies.containsKey(nearRtRicUrl)) {
+ policies.put(nearRtRicUrl, new HashMap<>());
+ }
+ return policies.get(nearRtRicUrl);
+ }
+ }
+
+ static class A1ClientMock implements A1Client {
+
+ private final RicPolicyDatabase policies = new RicPolicyDatabase();
+ private final PolicyTypes policyTypes = new PolicyTypes();
+
+ A1ClientMock() {
+ loadTypes(this.policyTypes);
+ }
+
+ @Override
+ public Mono<Collection<String>> getPolicyTypeIdentities(String nearRtRicUrl) {
+ Vector<String> result = new Vector<>();
+ for (PolicyType p : this.policyTypes.getAll()) {
+ result.add(p.name());
+ }
+ return Mono.just(result);
+ }
+
+ @Override
+ public Mono<Collection<String>> getPolicyIdentities(String nearRtRicUrl) {
+ Collection<String> result = policies.getPolicyIdentities(nearRtRicUrl);
+ return Mono.just(result);
+ }
+
+ @Override
+ public Mono<String> getPolicyType(String nearRtRicUrl, String policyTypeId) {
+ try {
+ return Mono.just(this.policyTypes.getType(policyTypeId).schema());
+ } catch (Exception e) {
+ return Mono.error(e);
+ }
+ }
+
+ @Override
+ public Mono<String> putPolicy(String nearRtRicUrl, String policyId, String policyString) {
+ policies.putPolicy(nearRtRicUrl, policyId, policyString);
+ return Mono.just("OK");
+ }
+
+ @Override
+ public Mono<String> deletePolicy(String nearRtRicUrl, String policyId) {
+ policies.deletePolicy(nearRtRicUrl, policyId);
+ return Mono.just("OK");
+ }
+
+ private static File[] getResourceFolderFiles(String folder) {
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ URL url = loader.getResource(folder);
+ String path = url.getPath();
+ return new File(path).listFiles();
+ }
+
+ private static String readFile(File file) throws IOException {
+ return new String(Files.readAllBytes(file.toPath()));
+ }
+
+ private void loadTypes(PolicyTypes policyTypes) {
+ File[] files = getResourceFolderFiles("policy_types/");
+ for (File file : files) {
+ try {
+ String schema = readFile(file);
+ String typeName = title(schema);
+ PolicyType type = ImmutablePolicyType.builder().name(typeName).schema(schema).build();
+ policyTypes.put(type);
+ } catch (Exception e) {
+ System.out.println("Could not load json schema " + e);
+ }
+ }
+ }
+ }
+
/**
* overrides the BeanFactory
*/
@TestConfiguration
static class TestBeanFactory {
+ private final Rics rics = new Rics();
+ private final Policies policies = new Policies();
+ private final PolicyTypes policyTypes = new PolicyTypes();
+
@Bean
public ApplicationConfig getApplicationConfig() {
return new MockApplicationConfig();
}
+
+ @Bean
+ A1Client getA1Client() {
+ return new A1ClientMock();
+ }
+
+ @Bean
+ public Policies getPolicies() {
+ return this.policies;
+ }
+
+ @Bean
+ public PolicyTypes getPolicyTypes() {
+ return this.policyTypes;
+ }
+
+ @Bean
+ public Rics getRics() {
+ return this.rics;
+ }
}
@LocalServerPort
private int port;
- public void keepServerAlive() {
+ private void keepServerAlive() {
System.out.println("Keeping server alive!");
try {
synchronized (this) {
}
}
- private static File[] getResourceFolderFiles(String folder) {
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- URL url = loader.getResource(folder);
- String path = url.getPath();
- return new File(path).listFiles();
- }
-
- private static String readFile(File file) throws IOException {
- return new String(Files.readAllBytes(file.toPath()));
- }
-
private static String title(String jsonSchema) {
JsonObject parsedSchema = (JsonObject) new JsonParser().parse(jsonSchema);
String title = parsedSchema.get("title").getAsString();
return title;
}
- private static void loadTypes(PolicyTypes policyTypes) {
- File[] files = getResourceFolderFiles("policy_types/");
- for (File file : files) {
- try {
- String schema = readFile(file);
- String typeName = title(schema);
- PolicyType type = ImmutablePolicyType.builder().name(typeName).jsonSchema(schema).build();
- policyTypes.put(type);
- } catch (Exception e) {
- System.out.println("Could not load json schema " + e);
- }
- }
- }
-
@Test
public void runMock() throws Exception {
- loadTypes(this.policyTypes);
keepServerAlive();
}