Skip to content

Commit fa6304f

Browse files
committed
Create initial helm operator tests
1 parent 86d9334 commit fa6304f

30 files changed

+297
-30
lines changed

kubernetes/src/test/java/oracle/kubernetes/operator/create/CreateOperatorGeneratedFilesOptionalFeaturesDisabledTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
public class CreateOperatorGeneratedFilesOptionalFeaturesDisabledTest
77
extends CreateOperatorGeneratedFilesOptionalFeaturesDisabledTestBase {
8+
89
@BeforeClass
910
public static void setup() throws Exception {
1011
defineOperatorYamlFactory(new ScriptedOperatorYamlFactory());

kubernetes/src/test/java/oracle/kubernetes/operator/create/CreateOperatorGeneratedFilesOptionalFeaturesEnabledTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
public class CreateOperatorGeneratedFilesOptionalFeaturesEnabledTest
77
extends CreateOperatorGeneratedFilesOptionalFeaturesEnabledTestBase {
8+
89
@BeforeClass
910
public static void setup() throws Exception {
1011
defineOperatorYamlFactory(new ScriptedOperatorYamlFactory());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at
3+
// http://oss.oracle.com/licenses/upl.
4+
5+
package oracle.kubernetes.operator.helm;
6+
7+
import oracle.kubernetes.operator.create.CreateOperatorGeneratedFilesDebugEnabledTestBase;
8+
import org.junit.BeforeClass;
9+
10+
public class CreateOperatorGeneratedFilesDebugEnabledIT
11+
extends CreateOperatorGeneratedFilesDebugEnabledTestBase {
12+
13+
@BeforeClass
14+
public static void setup() throws Exception {
15+
defineOperatorYamlFactory(new HelmOperatorYamlFactory());
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at
3+
// http://oss.oracle.com/licenses/upl.
4+
5+
package oracle.kubernetes.operator.helm;
6+
7+
import oracle.kubernetes.operator.create.CreateOperatorGeneratedFilesExtRestCustomTestBase;
8+
import org.junit.BeforeClass;
9+
10+
public class CreateOperatorGeneratedFilesExtRestCustomIT
11+
extends CreateOperatorGeneratedFilesExtRestCustomTestBase {
12+
13+
@BeforeClass
14+
public static void setup() throws Exception {
15+
defineOperatorYamlFactory(new HelmOperatorYamlFactory());
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at
3+
// http://oss.oracle.com/licenses/upl.
4+
5+
package oracle.kubernetes.operator.helm;
6+
7+
import oracle.kubernetes.operator.create.CreateOperatorGeneratedFilesOptionalFeaturesDisabledTestBase;
8+
import org.junit.BeforeClass;
9+
10+
public class CreateOperatorGeneratedFilesOptionalFeaturesDisabledIT
11+
extends CreateOperatorGeneratedFilesOptionalFeaturesDisabledTestBase {
12+
13+
@BeforeClass
14+
public static void setup() throws Exception {
15+
defineOperatorYamlFactory(new HelmOperatorYamlFactory());
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at
3+
// http://oss.oracle.com/licenses/upl.
4+
5+
package oracle.kubernetes.operator.helm;
6+
7+
import oracle.kubernetes.operator.create.CreateOperatorGeneratedFilesOptionalFeaturesEnabledTestBase;
8+
import org.junit.BeforeClass;
9+
10+
public class CreateOperatorGeneratedFilesOptionalFeaturesEnabledIT
11+
extends CreateOperatorGeneratedFilesOptionalFeaturesEnabledTestBase {
12+
13+
@BeforeClass
14+
public static void setup() throws Exception {
15+
defineOperatorYamlFactory(new HelmOperatorYamlFactory());
16+
}
17+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at
3+
// http://oss.oracle.com/licenses/upl.
4+
5+
package oracle.kubernetes.operator.helm;
6+
7+
import java.lang.reflect.Field;
8+
import java.lang.reflect.Modifier;
9+
import java.util.HashMap;
10+
import java.util.Map;
11+
import oracle.kubernetes.operator.utils.OperatorValues;
12+
13+
class HelmOperatorValues extends OperatorValues {
14+
HelmOperatorValues() {}
15+
16+
HelmOperatorValues(Map<String, Object> mappedValues) {
17+
for (Map.Entry<String, Object> entry : mappedValues.entrySet()) {
18+
assignToField(entry.getKey(), entry.getValue());
19+
}
20+
}
21+
22+
private void assignToField(String key, Object value) {
23+
try {
24+
Field field = getClass().getSuperclass().getDeclaredField(key);
25+
setFieldValue(field, value);
26+
} catch (NoSuchFieldException | IllegalAccessException ignored) {
27+
}
28+
}
29+
30+
private void setFieldValue(Field field, Object value) throws IllegalAccessException {
31+
boolean wasAccessible = field.isAccessible();
32+
try {
33+
field.setAccessible(true);
34+
field.set(this, value.toString());
35+
} finally {
36+
field.setAccessible(wasAccessible);
37+
}
38+
}
39+
40+
Map<String, Object> createMap() {
41+
HashMap<String, Object> map = new HashMap<>();
42+
map.put("internalOperatorCert", "test-cert");
43+
map.put("internalOperatorKey", "test-key");
44+
45+
for (Field field : getClass().getSuperclass().getDeclaredFields()) {
46+
addToMapIfNeeded(map, field);
47+
}
48+
return map;
49+
}
50+
51+
private void addToMapIfNeeded(HashMap<String, Object> map, Field field) {
52+
try {
53+
Object value = getValue(field);
54+
if (includeInMap(field, value)) {
55+
map.put(field.getName(), value);
56+
}
57+
} catch (IllegalAccessException ignored) {
58+
}
59+
}
60+
61+
private boolean includeInMap(Field field, Object value) {
62+
return !Modifier.isStatic(field.getModifiers()) && !isEmptyString(value);
63+
}
64+
65+
private boolean isEmptyString(Object value) {
66+
return value instanceof String && ((String) value).length() == 0;
67+
}
68+
69+
private Object getValue(Field field) throws IllegalAccessException {
70+
boolean wasAccessible = field.isAccessible();
71+
try {
72+
field.setAccessible(true);
73+
return field.get(this);
74+
} finally {
75+
field.setAccessible(wasAccessible);
76+
}
77+
}
78+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at
3+
// http://oss.oracle.com/licenses/upl.
4+
5+
package oracle.kubernetes.operator.helm;
6+
7+
import static oracle.kubernetes.operator.utils.OperatorValues.EXTERNAL_REST_OPTION_CUSTOM_CERT;
8+
import static org.hamcrest.Matchers.allOf;
9+
import static org.hamcrest.Matchers.both;
10+
import static org.hamcrest.Matchers.equalTo;
11+
import static org.hamcrest.Matchers.hasEntry;
12+
import static org.hamcrest.Matchers.hasKey;
13+
import static org.junit.Assert.assertThat;
14+
15+
import com.google.common.collect.ImmutableMap;
16+
import java.util.Map;
17+
import org.hamcrest.Matcher;
18+
import org.junit.Test;
19+
20+
public class HelmOperatorValuesTest {
21+
@Test
22+
public void whenNothingSet_createsMapWithInternalCerts() {
23+
assertThat(
24+
new HelmOperatorValues().createMap(),
25+
both(hasKey("internalOperatorCert")).and(hasKey("internalOperatorKey")));
26+
}
27+
28+
@Test
29+
public void whenValuesSet_createMapWithSetValues() {
30+
HelmOperatorValues operatorValues = new HelmOperatorValues();
31+
operatorValues.setupExternalRestCustomCert();
32+
33+
assertThat(operatorValues.createMap(), hasExpectedEntries());
34+
}
35+
36+
private Matcher<? super Map<?, ?>> hasExpectedEntries() {
37+
return allOf(
38+
hasEntry("externalRestHttpsPort", "30070"),
39+
hasEntry("externalRestOption", EXTERNAL_REST_OPTION_CUSTOM_CERT),
40+
hasKey("externalOperatorCert"),
41+
hasKey("externalOperatorKey"));
42+
}
43+
44+
@Test
45+
public void whenCreatedFromMap_hasSpecifiedValues() {
46+
HelmOperatorValues values =
47+
new HelmOperatorValues(
48+
new ImmutableMap.Builder<String, Object>()
49+
.put("serviceAccount", "test-account")
50+
.put("weblogicOperatorImage", "test-image")
51+
.put("javaLoggingLevel", "FINE")
52+
.build());
53+
54+
assertThat(values.getServiceAccount(), equalTo("test-account"));
55+
assertThat(values.getWeblogicOperatorImage(), equalTo("test-image"));
56+
assertThat(values.getJavaLoggingLevel(), equalTo("FINE"));
57+
}
58+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at
3+
// http://oss.oracle.com/licenses/upl.
4+
5+
package oracle.kubernetes.operator.helm;
6+
7+
import static org.hamcrest.MatcherAssert.assertThat;
8+
import static org.hamcrest.Matchers.emptyOrNullString;
9+
10+
import java.util.Map;
11+
import oracle.kubernetes.operator.utils.GeneratedOperatorObjects;
12+
import oracle.kubernetes.operator.utils.OperatorValues;
13+
import oracle.kubernetes.operator.utils.OperatorYamlFactory;
14+
import oracle.kubernetes.operator.utils.ParsedWeblogicOperatorSecurityYaml;
15+
import oracle.kubernetes.operator.utils.ParsedWeblogicOperatorYaml;
16+
17+
public class HelmOperatorYamlFactory extends OperatorYamlFactory {
18+
@Override
19+
public OperatorValues createDefaultValues() {
20+
return new HelmOperatorValues().withTestDefaults();
21+
}
22+
23+
@Override
24+
public GeneratedOperatorObjects generate(OperatorValues inputValues) throws Exception {
25+
Map<String, Object> overrides = ((HelmOperatorValues) inputValues).createMap();
26+
ProcessedChart chart = new ProcessedChart("weblogic-operator", overrides);
27+
28+
assertThat(chart.getError(), emptyOrNullString());
29+
30+
OperatorValues effectiveValues = new HelmOperatorValues(chart.getValues());
31+
return new GeneratedOperatorObjects(
32+
new ParsedWeblogicOperatorYaml(chart, effectiveValues),
33+
new ParsedWeblogicOperatorSecurityYaml(chart, effectiveValues));
34+
}
35+
}

kubernetes/src/test/java/oracle/kubernetes/operator/helm/ProcessedChart.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,18 @@
2121
import java.util.List;
2222
import java.util.Map;
2323
import java.util.Objects;
24+
import oracle.kubernetes.operator.utils.YamlReader;
2425
import org.yaml.snakeyaml.Yaml;
2526

2627
/**
2728
* An encapsulation of a helm chart, along with the processing that must be done to make it usable.
2829
*/
2930
@SuppressWarnings({"unchecked", "SameParameterValue"})
30-
public class ProcessedChart {
31+
public class ProcessedChart implements YamlReader {
3132
private final String chartName;
3233
private Map<String, Object> valueOverrides;
3334
private String error;
34-
private List<Map<String, String>> documents;
35+
private List<Object> documents;
3536
private Process process;
3637
private Map<String, Object> values;
3738

@@ -79,7 +80,8 @@ private String dump(InputStream in) throws IOException {
7980
*/
8081
List<Map<String, String>> getDocuments(String kind) throws Exception {
8182
List<Map<String, String>> matches = new ArrayList<>();
82-
for (Map<String, String> document : getDocuments()) {
83+
for (Object object : getYamlDocuments()) {
84+
Map document = (Map) object;
8385
if (document.get("kind").equals(kind)) {
8486
matches.add(document);
8587
}
@@ -94,14 +96,14 @@ List<Map<String, String>> getDocuments(String kind) throws Exception {
9496
* @return a list of yaml documents
9597
* @throws Exception if an error occurs
9698
*/
97-
public List<Map<String, String>> getDocuments() throws Exception {
99+
public Iterable<Object> getYamlDocuments() throws Exception {
98100
if (documents == null) {
99-
List<Map<String, String>> documents = new ArrayList<>();
101+
List<Object> documents = new ArrayList<>();
100102
new Yaml()
101103
.loadAll(getProcess().getInputStream())
102104
.forEach(
103105
(document) -> {
104-
if (document != null) documents.add((Map<String, String>) document);
106+
if (document != null) documents.add(document);
105107
});
106108

107109
this.documents = documents;
@@ -115,8 +117,8 @@ public List<Map<String, String>> getDocuments() throws Exception {
115117
*
116118
* @return a map of values
117119
*/
118-
public Map<String, Object> getValues() {
119-
assert documents != null : "Must get the documents first";
120+
public Map<String, Object> getValues() throws Exception {
121+
getYamlDocuments();
120122

121123
return values;
122124
}

0 commit comments

Comments
 (0)