aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/java/org/onap/crud/service/AaiResourceServiceTest.java
blob: c23f3ac6f697aac17f565254585fe6231d8bf465 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
/**
 * ============LICENSE_START=======================================================
 * org.onap.aai
 * ================================================================================
 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
 * Copyright © 2017-2018 Amdocs
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */
package org.onap.crud.service;

import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.util.Map;

import org.junit.Before;
import org.junit.Test;
import org.onap.aai.exceptions.AAIException;
import org.onap.aai.serialization.db.EdgeProperty;
import org.onap.aai.serialization.db.EdgeRule;
import org.onap.aai.serialization.db.EdgeRules;
import org.onap.aai.serialization.db.EdgeType;
import org.onap.crud.exception.CrudException;
import org.onap.crud.parser.EdgePayload;
import com.google.gson.JsonElement;

public class AaiResourceServiceTest {

  public AaiResourceService aaiResSvc = null;
  
  
  @Before
  public void setup() {
    System.setProperty("AJSC_HOME", ".");
    System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
    
    aaiResSvc = new AaiResourceService();
  }
  
  
  /**
   * This test validates that we can apply db edge rules against an edge request
   * payload and have the properties defined in the edge rules merged into the
   * payload.
   * 
   * @throws CrudException
   * @throws AAIException
   */
  @Test
  public void applyEdgeRulesToPayloadTest() throws CrudException, AAIException {
    
    String content = "{" +
        "\"source\": \"services/inventory/v8/l-interface/369553424\", " +
        "\"target\": \"services/inventory/v8/logical-link/573444128\"," +
        "\"properties\": {" +
        "}" +
     "}";
    
    // Convert our simulated payload to an EdgePayload object.
    EdgePayload payload = EdgePayload.fromJson(content);
    
    // Now, apply the db edge rules against our edge payload.
    EdgePayload payloadAfterEdgeRules = aaiResSvc.applyEdgeRulesToPayload(payload);
    
    EdgeRules rules = EdgeRules.getInstance();
    EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "l-interface", "logical-link");
    Map<EdgeProperty, String> edgeProps = rule.getEdgeProperties();
    
    // Validate that the properties defined in the DB edge rules show up in our
    // final payload.
    for(EdgeProperty key : edgeProps.keySet()) {
      assertTrue(payloadAfterEdgeRules.toString().contains(key.toString()));
    }
  }
  
  
  /**
   * This test validates that trying to apply edge rules where there is no
   * db edge rules entry for the supplied source and target vertex types
   * produces an exception.
   * 
   * @throws CrudException
   */
  @Test
  public void noRuleForEdgeTest() throws CrudException {
        
    String content = "{" +
        "\"source\": \"services/inventory/v8/commodore-64/12345\", " +
        "\"target\": \"services/inventory/v8/jumpman/67890\"," +
        "\"properties\": {" +
        "}" +
     "}";
    
    // Convert our simulated payload to an EdgePayload object.
    EdgePayload payload = EdgePayload.fromJson(content);
    
    // Now, apply the db edge rules against our edge payload.
    try {
      aaiResSvc.applyEdgeRulesToPayload(payload);
      
    } catch (CrudException e) {
      
      // We expected an exception since there is no rule for our made up vertices..
      assertTrue(e.getMessage().contains("No edge rules for"));
      return;
    }
    
    // If we're here then something unexpected happened...
    fail();
  }
  
  
  /**
   * This test validates that it is possible to merge client supplied and edge rule
   * supplied properties into one edge property list.
   * 
   * @throws Exception
   */
  @Test
  public void mergeEdgePropertiesTest() throws Exception {
        
    String content = "{" +
        "\"source\": \"services/inventory/v8/l-interface/369553424\", " +
        "\"target\": \"services/inventory/v8/logical-link/573444128\"," +
        "\"properties\": {" +
          "\"multiplicity\": \"many\"," +
          "\"is-parent\": true," +
          "\"uses-resource\": \"true\"," +
          "\"has-del-target\": \"true\"" +
        "}" +
     "}";
    
    EdgePayload payload = EdgePayload.fromJson(content);
    EdgeRules rules = EdgeRules.getInstance();
    EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "l-interface", "logical-link");
    Map<EdgeProperty, String> edgeProps = rule.getEdgeProperties();

    // Merge the client supplied properties with the properties defined in the DB edge rules.
    JsonElement mergedProperties = 
        aaiResSvc.mergeProperties(payload.getProperties(), rule.getEdgeProperties());
    
    // Now, validate that the resulting set of properties contains both the client and edge
    // rule supplied properties.
    String mergedPropertiesString = mergedProperties.toString();
    assertTrue("Client supplied property 'multiplicity' is missing from merged properties set",
               mergedPropertiesString.contains("multiplicity"));
    assertTrue("Client supplied property 'is-parent' is missing from merged properties set",
               mergedPropertiesString.contains("is-parent"));
    assertTrue("Client supplied property 'uses-resource' is missing from merged properties set",
               mergedPropertiesString.contains("uses-resource"));
    assertTrue("Client supplied property 'has-del-target' is missing from merged properties set",
               mergedPropertiesString.contains("has-del-target"));
    
    for(EdgeProperty key : edgeProps.keySet()) {
      assertTrue("Edge rule supplied property '" + key.toString() + "' is missing from merged properties set",
                 mergedPropertiesString.contains(key.toString()));
    }
  }
  
  /**
   * This test validates that if we try to merge client supplied edge properties
   * with the properties defined in the db edge rules, and there is a conflict,
   * then the merge will fail.
   * 
   * @throws Exception
   */
  @Test
  public void mergeEdgePropertiesConflictTest() throws Exception {
        
    String content = "{" +
        "\"source\": \"services/inventory/v8/l-interface/369553424\", " +
        "\"target\": \"services/inventory/v8/logical-link/573444128\"," +
        "\"properties\": {" +
          "\"contains-other-v\": \"OUT\"" +
        "}" +
     "}";
    
    EdgePayload payload = EdgePayload.fromJson(content);
    EdgeRules rules = EdgeRules.getInstance();
    EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "l-interface", "logical-link");

    try {
      
      // Try to merge our client supplied properties with the properties defined
      // in the db edge rules.
      aaiResSvc.mergeProperties(payload.getProperties(), rule.getEdgeProperties());
    
    } catch (CrudException e) {
      
      // We should have gotten an exception because we are trying to set a parameter which is
      // already defined in the db edge rules, so if we're here then we are good.
      return;
    }

    // If we made it here then we were allowed to set a property that is already defined
    // in the db edge rules, which we should not have...
    fail();
  }
  



}