blob: 497de6f8b3a21e7382091eb1a519b6d7286d0225 [file] [log] [blame]
Chanhee Lee94010482017-01-23 23:06:18 -08001/*
2 * Copyright 2017-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.security.store;
18
19import static org.onosproject.security.store.SecurityModeState.INSTALLED;
20import static org.onosproject.security.store.SecurityModeState.POLICY_VIOLATED;
21import static org.onosproject.security.store.SecurityModeState.REVIEWED;
22import static org.onosproject.security.store.SecurityModeState.SECURED;
23
24import java.util.HashSet;
25import java.util.Set;
26import java.util.concurrent.ConcurrentHashMap;
27
28import org.onosproject.core.ApplicationId;
29import org.onosproject.core.DefaultApplicationId;
30import org.onosproject.security.Permission;
31
32import com.google.common.collect.ImmutableSet;
33
34/**
35 * Test adapter for SecurityModeStore.
36 */
37public class SecurityModeStoreAdapter implements SecurityModeStore {
38
39 private DefaultApplicationId appId;
40 private ConcurrentHashMap<ApplicationId, SecurityInfo> states;
41 private ConcurrentHashMap<ApplicationId, Set<Permission>> violations;
42 private SecurityInfo testSecInfo;
43 private Permission testPermission;
44 private Set<Permission> testPermissions;
45
46 public SecurityModeStoreAdapter() {
47 states = new ConcurrentHashMap<ApplicationId, SecurityInfo>();
48 testPermissions = new HashSet<Permission>();
49 testPermission = new Permission("testClass", "testName");
50 testPermissions.add(testPermission);
51
52 testSecInfo = new SecurityInfo(testPermissions, SECURED);
53
54 appId = new DefaultApplicationId(2, "violation");
55 testPermissions = new HashSet<Permission>();
56 testPermission = new Permission("testClass", "testNameViolation");
57 testPermissions.add(testPermission);
58 violations = new ConcurrentHashMap<ApplicationId, Set<Permission>>();
59 violations.put(appId, testPermissions);
60 }
61
62 @Override
63 public void setDelegate(SecurityModeStoreDelegate delegate) {
64 }
65
66 @Override
67 public void unsetDelegate(SecurityModeStoreDelegate delegate) {
68 }
69
70 @Override
71 public boolean hasDelegate() {
72 return false;
73 }
74
75 @Override
76 public boolean registerApplication(ApplicationId appId) {
77 states.put(appId, testSecInfo);
78 return true;
79 }
80
81 @Override
82 public void unregisterApplication(ApplicationId appId) {
83 states.remove(appId);
84 }
85
86 @Override
87 public SecurityModeState getState(ApplicationId appId) {
88 return states.get(appId).getState();
89 }
90
91 @Override
92 public Set<String> getBundleLocations(ApplicationId appId) {
93 return null;
94 }
95
96 @Override
97 public Set<ApplicationId> getApplicationIds(String location) {
98 return null;
99 }
100
101 @Override
102 public Set<Permission> getRequestedPermissions(ApplicationId appId) {
103 Set<Permission> permissions = violations.get(appId);
104 return permissions != null ? permissions : ImmutableSet.of();
105 }
106
107 @Override
108 public Set<Permission> getGrantedPermissions(ApplicationId appId) {
109 return states.get(appId).getPermissions();
110 }
111
112 @Override
113 public void requestPermission(ApplicationId appId, Permission permission) {
114 }
115
116 @Override
117 public boolean isSecured(ApplicationId appId) {
118 SecurityInfo info = states.get(appId);
119 return info == null ? false : info.getState().equals(SECURED);
120 }
121
122 @Override
123 public void reviewPolicy(ApplicationId appId) {
124 states.computeIfPresent(appId, (applicationId, securityInfo) -> {
125 if (securityInfo.getState().equals(SECURED)) {
126 return new SecurityInfo(ImmutableSet.of(), REVIEWED);
127 }
128 return securityInfo;
129 });
130 }
131
132 @Override
133 public void acceptPolicy(ApplicationId appId, Set<Permission> permissionSet) {
134 states.compute(appId,
135 (id, securityInfo) -> {
136 switch (securityInfo.getState()) {
137 case POLICY_VIOLATED:
138 return new SecurityInfo(securityInfo.getPermissions(), SECURED);
139 case SECURED:
140 return new SecurityInfo(securityInfo.getPermissions(), POLICY_VIOLATED);
141 case INSTALLED:
142 return new SecurityInfo(securityInfo.getPermissions(), REVIEWED);
143 case REVIEWED:
144 return new SecurityInfo(securityInfo.getPermissions(), INSTALLED);
145 default:
146 return securityInfo;
147 }
148 });
149 }
150
151}