84d403f94f7744fefa638641c450f5147d394dd5
[moon.git] /
1 /*
2  * Copyright (c) 2016 Red Hat, Inc.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.aaa.idpmapping;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14 import static org.mockito.Matchers.any;
15 import static org.mockito.Mockito.times;
16 import static org.mockito.Mockito.verify;
17 import static org.mockito.Mockito.when;
18
19 import java.util.ArrayList;
20 import java.util.HashMap;
21 import java.util.List;
22 import java.util.Map;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.junit.runner.RunWith;
26 import org.mockito.Mock;
27 import org.mockito.Mockito;
28 import org.powermock.api.mockito.PowerMockito;
29 import org.powermock.api.support.membermodification.MemberMatcher;
30 import org.powermock.api.support.membermodification.MemberModifier;
31 import org.powermock.core.classloader.annotations.PrepareForTest;
32 import org.powermock.modules.junit4.PowerMockRunner;
33 import org.powermock.reflect.Whitebox;
34
35 @PrepareForTest(RuleProcessor.class)
36 @RunWith(PowerMockRunner.class)
37 public class RuleProcessorTest {
38
39     @Mock
40     private RuleProcessor ruleProcess;
41
42     @Before
43     public void setUp() {
44         ruleProcess = PowerMockito.mock(RuleProcessor.class, Mockito.CALLS_REAL_METHODS);
45     }
46
47     @Test
48     public void testJoin() {
49         List<Object> list = new ArrayList<Object>();
50         list.add("str1");
51         list.add("str2");
52         list.add("str3");
53         assertEquals("str1/str2/str3", RuleProcessor.join(list, "/"));
54     }
55
56     @Test
57     public void testSubstituteVariables() {
58         Map<String, Object> namespace = new HashMap<String, Object>() {
59             {
60                 put("foo1", new HashMap<String, String>() {
61                     {
62                         put("0", "1");
63                     }
64                 });
65             }
66         };
67         String str = "foo1[0]";
68         String subVariable = ruleProcess.substituteVariables(str, namespace);
69         assertNotNull(subVariable);
70         assertEquals(subVariable, str);
71     }
72
73     @Test
74     public void testGetMapping() {
75         Map<String, Object> namespace = new HashMap<String, Object>() {
76             {
77                 put("foo1", new HashMap<String, String>() {
78                     {
79                         put("0", "1");
80                     }
81                 });
82             }
83         };
84         final Map<String, Object> item = new HashMap<String, Object>() {
85             {
86                 put("str", "val");
87             }
88         };
89         Map<String, Object> rules = new HashMap<String, Object>() {
90             {
91                 put("mapping", item);
92                 put("mapping_name", "mapping");
93             }
94         };
95         Map<String, Object> mapping = ruleProcess.getMapping(namespace, rules);
96         assertNotNull(mapping);
97         assertTrue(mapping.containsKey("str"));
98         assertEquals("val", mapping.get("str"));
99     }
100
101     @Test
102     public void testProcess() throws Exception {
103         String json = " {\"rules\":[" + "{\"Name\":\"user\", \"Id\":1},"
104                 + "{\"Name\":\"Admin\", \"Id\":2}]} ";
105         Map<String, Object> mapping = new HashMap<String, Object>() {
106             {
107                 put("Name", "Admin");
108             }
109         };
110         List<Map<String, Object>> internalRules = new ArrayList<Map<String, Object>>();
111         Map<String, Object> internalRule = new HashMap<String, Object>() {
112             {
113                 put("Name", "Admin");
114                 put("statement_blocks", "user");
115             }
116         };
117         internalRules.add(internalRule);
118         MemberModifier.field(RuleProcessor.class, "rules").set(ruleProcess, internalRules);
119         PowerMockito.suppress(MemberMatcher.method(RuleProcessor.class, "processRule", Map.class,
120                 Map.class));
121         PowerMockito.when(ruleProcess, "processRule", any(Map.class), any(Map.class)).thenReturn(
122                 ProcessResult.RULE_SUCCESS);
123         PowerMockito.suppress(MemberMatcher.method(RuleProcessor.class, "getMapping", Map.class,
124                 Map.class));
125         when(ruleProcess.getMapping(any(Map.class), any(Map.class))).thenReturn(mapping);
126         Whitebox.invokeMethod(ruleProcess, "process", json);
127         verify(ruleProcess, times(3)).getMapping(any(Map.class), any(Map.class));
128     }
129
130 }