forked from cedar-policy/cedar-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestUtil.java
More file actions
123 lines (104 loc) · 4.89 KB
/
TestUtil.java
File metadata and controls
123 lines (104 loc) · 4.89 KB
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
/*
* Copyright Cedar Contributors
*
* 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
*
* https://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.
*/
package com.cedarpolicy;
import com.cedarpolicy.model.schema.Schema;
import com.cedarpolicy.model.schema.Schema.JsonOrCedar;
import com.cedarpolicy.model.policy.TemplateLink;
import com.cedarpolicy.model.policy.PolicySet;
import com.cedarpolicy.model.policy.LinkValue;
import com.cedarpolicy.model.policy.Policy;
import com.cedarpolicy.model.entity.Entity;
import com.cedarpolicy.value.EntityTypeName;
import java.util.HashSet;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Optional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
/** Utils to help with tests. */
public final class TestUtil {
private TestUtil() {
}
/**
* Load schema file.
*
* @param schemaFile Schema file name
*/
public static Schema loadSchemaResource(String schemaFile) {
try {
String text = new String(Files.readAllBytes(
Paths.get(
ValidationTests.class.getResource(schemaFile).toURI())),
StandardCharsets.UTF_8);
return new Schema(JsonOrCedar.Json, Optional.of(text), Optional.empty());
} catch (Exception e) {
throw new RuntimeException("Failed to load test schema file " + schemaFile, e);
}
}
public static Schema loadCedarSchemaResource(String schemaFile) {
try {
String text = new String(Files.readAllBytes(
Paths.get(
ValidationTests.class.getResource(schemaFile).toURI())),
StandardCharsets.UTF_8);
return new Schema(JsonOrCedar.Cedar, Optional.empty(), Optional.of(text));
} catch (Exception e) {
throw new RuntimeException("Failed to load test schema file " + schemaFile, e);
}
}
public static PolicySet buildValidPolicySet() {
EntityTypeName principalType = EntityTypeName.parse("User").get();
Set<Policy> policies = new HashSet<>();
Set<Policy> templates = new HashSet<>();
ArrayList<TemplateLink> templateLinks = new ArrayList<TemplateLink>();
ArrayList<LinkValue> linkValueList = new ArrayList<>();
String fullPolicy =
"permit(principal == User::\"Bob\", action == Action::\"View_Photo\", resource in Album::\"Vacation\");";
Policy newPolicy = new Policy(fullPolicy, "p1");
policies.add(newPolicy);
String template = "permit(principal == ?principal, action == Action::\"View_Photo\", resource in Album::\"Vacation\");";
Policy policyTemplate = new Policy(template, "t0");
templates.add(policyTemplate);
Entity principal = new Entity(principalType.of("Alice"), new HashMap<>(), new HashSet<>());
LinkValue principalLinkValue = new LinkValue("?principal", principal.getEUID());
linkValueList.add(principalLinkValue);
TemplateLink templateLink = new TemplateLink("t0", "tl0", linkValueList);
templateLinks.add(templateLink);
return new PolicySet(policies, templates, templateLinks);
}
public static PolicySet buildInvalidPolicySet() {
EntityTypeName principalType = EntityTypeName.parse("User").get();
Set<Policy> policies = new HashSet<>();
Set<Policy> templates = new HashSet<>();
ArrayList<TemplateLink> templateLinks = new ArrayList<TemplateLink>();
ArrayList<LinkValue> linkValueList = new ArrayList<>();
String fullPolicy =
"permit(prinipal == User::\"Bob\", action == Action::\"View_Photo\", resource in Album::\"Vacation\");";
Policy newPolicy = new Policy(fullPolicy, "p1");
policies.add(newPolicy);
String template = "permit(principal, action == Action::\"View_Photo\", resource in Album::\"Vacation\");";
Policy policyTemplate = new Policy(template, "t0");
templates.add(policyTemplate);
Entity principal = new Entity(principalType.of("Alice"), new HashMap<>(), new HashSet<>());
LinkValue principalLinkValue = new LinkValue("?principal", principal.getEUID());
linkValueList.add(principalLinkValue);
TemplateLink templateLink = new TemplateLink("t0", "tl0", linkValueList);
templateLinks.add(templateLink);
return new PolicySet(policies, templates, templateLinks);
}
}