aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/java/org/onap/aai/babel/TestApplication.java
blob: 200b0e2163b32695a68c54d7941ac6f0abcd13c4 (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
/**
 * ============LICENSE_START=======================================================
 * org.onap.aai
 * ================================================================================
 * Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
 * Copyright (c) 2017-2019 European Software Marketing Ltd.
 * ================================================================================
 * 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.aai.babel;

import java.io.IOException;
import org.eclipse.jetty.util.security.Password;
import org.hamcrest.Description;
import org.hamcrest.TypeSafeMatcher;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(classes = BabelApplication.class)
public class TestApplication {

    @Rule
    public ExpectedException expectedEx = ExpectedException.none();

    /**
     * Initialize System Properties.
     */
    @Before
    public void init() {
        System.setProperty("APP_HOME", ".");
        System.setProperty("CONFIG_HOME", "src/test/resources");
        System.setProperty("server.ssl.key-store", "src/test/resources/auth/keystore.jks");
    }

    @Test(expected = Test.None.class /* no exception expected */)
    public void testApplicationStarts() {
        System.setProperty("KEY_STORE_PASSWORD", "password");
        BabelApplication.main(new String[] {});
        BabelApplication.exit();
    }

    @Test(expected = Test.None.class /* no exception expected */)
    public void testApplicationStartsWithObfuscatedPassword() {
        System.setProperty("KEY_STORE_PASSWORD", Password.obfuscate("password"));
        BabelApplication.main(new String[] {});
        BabelApplication.exit();
    }

    @Test
    public void testApplicationWithNullArgs() {
        System.setProperty("KEY_STORE_PASSWORD", "test");
        expectedEx.expect(IllegalArgumentException.class);
        expectedEx.expectMessage("Args must not be null");
        BabelApplication.main(null);
    }

    @Test
    public void testApplicationWithEmptyKeyStorePassword() {
        System.setProperty("KEY_STORE_PASSWORD", "");
        expectedEx.expect(IllegalArgumentException.class);
        expectedEx.expectMessage("roperty KEY_STORE_PASSWORD not set");
        BabelApplication.main(new String[] {});
    }

    @Test
    public void testApplicationWithNullKeyStorePassword() {
        System.clearProperty("KEY_STORE_PASSWORD");
        expectedEx.expect(IllegalArgumentException.class);
        expectedEx.expectMessage("roperty KEY_STORE_PASSWORD not set");
        BabelApplication.main(new String[] {});
    }

    @Test
    public void testApplicationWithIncorrectKeyStorePassword() {
        System.setProperty("KEY_STORE_PASSWORD", "test");
        final CauseMatcher expectedCause = new CauseMatcher(IOException.class, "password was incorrect");
        expectedEx.expectCause(expectedCause);
        BabelApplication.main(new String[] {});
    }

    /**
     * This test asserts that if the KEY_STORE_PASSWORD System Property is set (and is not empty) then the value is
     * passed to Jetty, debobfuscated, and used to open the key store, even if the resulting password value is actually
     * an empty string.
     */
    @Test
    public void testApplicationWithBlankObfuscatedKeyStorePassword() {
        // Note that "OBF:" is correctly deobfuscated and results in an empty string.
        System.setProperty("KEY_STORE_PASSWORD", "OBF:");
        final CauseMatcher expectedCause = new CauseMatcher(IOException.class, "password was incorrect");
        expectedEx.expectCause(expectedCause);
        BabelApplication.main(new String[] {});
    }

    private static class CauseMatcher extends TypeSafeMatcher<Throwable> {

        private final Class<? extends Throwable> type;
        private final String expectedMessage;

        public CauseMatcher(Class<? extends Throwable> type, String expectedMessage) {
            this.type = type;
            this.expectedMessage = expectedMessage;
        }

        @Override
        protected boolean matchesSafely(Throwable item) {
            return item.getClass().isAssignableFrom(type) && item.getMessage().contains(expectedMessage);
        }

        @Override
        public void describeTo(Description description) {
            description.appendValue(type).appendText(" and message ").appendValue(expectedMessage);
        }
    }

}