9da9c1d2be803a60e5e891fb67013574672b8246
[policy/distribution.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Intel Corp. All rights reserved.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.distribution.forwarding.file;
22
23 import static org.junit.Assert.assertTrue;
24 import static org.junit.Assert.fail;
25
26 import java.io.IOException;
27 import java.nio.file.Files;
28 import java.nio.file.Path;
29 import java.nio.file.Paths;
30 import java.util.ArrayList;
31 import java.util.Collection;
32 import java.util.Date;
33
34 import org.junit.AfterClass;
35 import org.junit.BeforeClass;
36 import org.junit.ClassRule;
37 import org.junit.Test;
38 import org.junit.rules.TemporaryFolder;
39 import org.junit.runner.RunWith;
40 import org.mockito.Mock;
41 import org.mockito.Mockito;
42 import org.mockito.runners.MockitoJUnitRunner;
43 import org.onap.policy.common.parameters.ParameterGroup;
44 import org.onap.policy.common.parameters.ParameterService;
45 import org.onap.policy.distribution.forwarding.PolicyForwardingException;
46 import org.onap.policy.distribution.model.OptimizationPolicy;
47 import org.onap.policy.distribution.model.Policy;
48
49 /**
50  * Class to perform unit test of {@link FilePolicyForwarder}.
51  *
52  */
53 @RunWith(MockitoJUnitRunner.class)
54 public class FilePolicyForwarderTest {
55     @ClassRule
56     public static TemporaryFolder tempFolder = new TemporaryFolder();
57
58     private static final boolean VERBOSE = true;
59     private static final String GROUP_NAME = "fileConfiguration";
60
61     /**
62      * Set up.
63      */
64     @BeforeClass
65     public static void setUp() {
66         final FilePolicyForwarderParameterBuilder builder = new FilePolicyForwarderParameterBuilder();
67         builder.setPath(tempFolder.getRoot().getAbsolutePath().toString()).setVerbose(VERBOSE);
68         final ParameterGroup parameterGroup = new FilePolicyForwarderParameterGroup(builder);
69         parameterGroup.setName(GROUP_NAME);
70         ParameterService.register(parameterGroup);
71     }
72
73     /**
74      * Tear down.
75      */
76     @AfterClass
77     public static void tearDown() {
78         ParameterService.deregister(GROUP_NAME);
79     }
80
81     @Test
82     public void testForwardPolicy() {
83         final Collection<Policy> policies = new ArrayList<>();
84         final OptimizationPolicy policy = new OptimizationPolicy();
85
86         policy.setPolicyName("test");
87         policy.setPolicyDescription("test");
88         policy.setOnapName("");
89         policy.setConfigBody("");
90         policy.setConfigBodyType("");
91         policy.setTimetolive(new Date());
92         policy.setGuard("");
93         policy.setRiskLevel("");
94         policy.setRiskType("");
95         policies.add(policy);
96
97         final FilePolicyForwarder forwarder = new FilePolicyForwarder();
98         forwarder.configure(GROUP_NAME);
99
100         try {
101             forwarder.forward(policies);
102             Path path = Paths.get(tempFolder.getRoot().getAbsolutePath().toString(), policy.getPolicyName());
103             assertTrue(Files.exists(path));
104         } catch (final Exception exp) {
105             fail("Test must not throw an exception");
106         }
107     }
108
109     @Test
110     public void testForwardPolicyError() {
111         final Collection<Policy> policies = new ArrayList<>();
112         OptimizationPolicy policy = new OptimizationPolicy();
113         policy.setPolicyName("test");
114         policy.setPolicyDescription("test");
115         policy.setOnapName("");
116         policy.setConfigBody("");
117         policy.setConfigBodyType("");
118         policy.setTimetolive(new Date());
119         policy.setGuard("");
120         policy.setRiskLevel("");
121         policy.setRiskType("");
122
123         OptimizationPolicy spy = Mockito.spy(policy);
124         Mockito.when(spy.getRiskType()).thenThrow(IOException.class);
125         policies.add(spy);
126
127         final FilePolicyForwarder forwarder = new FilePolicyForwarder();
128         forwarder.configure(GROUP_NAME);
129
130         try {
131             forwarder.forward(policies);
132             fail("Test must throw an exception");
133         } catch (final Exception exp) {
134             assertTrue(exp.getMessage().contains("Error sending policy"));
135         }
136     }
137
138     @Test
139     public void testForwardUnsupportedPolicy() {
140         final Collection<Policy> policies = new ArrayList<>();
141         final FilePolicyForwarder forwarder = new FilePolicyForwarder();
142         forwarder.configure(GROUP_NAME);
143
144         final Policy policy = new UnsupportedPolicy();
145         policies.add(policy);
146
147         try {
148             forwarder.forward(policies);
149             fail("Test must throw an exception");
150         } catch (final Exception exp) {
151             assertTrue(exp.getMessage().contains("Cannot forward policy"));
152         }
153     }
154
155     class UnsupportedPolicy implements Policy {
156
157         @Override
158         public String getPolicyName() {
159             return "unsupported";
160         }
161
162         @Override
163         public String getPolicyType() {
164             return "unsupported";
165         }
166     }
167 }