blob: b4c1c94144f4a90045b44e5601a06b9d4f0025ff [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
package org.apache.myfaces.tobago.internal.config;
import org.apache.myfaces.tobago.config.TobagoConfig;
import org.apache.myfaces.tobago.context.Theme;
import org.apache.myfaces.tobago.context.ThemeScript;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.Map;
public class TobagoConfigMergingUnitTest {
@Test
public void testPreventFrameAttacksCascadingDefault() {
final TobagoConfig config =
new TobagoConfig(null, "tobago-config-merge-0.xml", "tobago-config-merge-1.xml");
Assertions.assertFalse(config.isPreventFrameAttacks());
}
@Test
public void testPreventFrameAttacks() {
final TobagoConfig config = new TobagoConfig(null, "tobago-config-merge-0.xml");
Assertions.assertFalse(config.isPreventFrameAttacks());
}
@Test
public void testPreventFrameAttacksDefault() {
final TobagoConfig config = new TobagoConfig(null, "tobago-config-merge-1.xml");
Assertions.assertTrue(config.isPreventFrameAttacks());
}
@Test
public void testContentSecurityPolicy() {
final TobagoConfig config = new TobagoConfig(null, "tobago-config-merge-0.xml");
Assertions.assertSame(config.getContentSecurityPolicy().getMode(), ContentSecurityPolicy.Mode.ON);
final Map<String, String> directiveMap = config.getContentSecurityPolicy().getDirectiveMap();
Assertions.assertEquals(1, directiveMap.size());
Assertions.assertEquals("'self'", directiveMap.get("default-src"));
}
@Test
public void testContentSecurityPolicyExtend() {
final TobagoConfig config =
new TobagoConfig(null, "tobago-config-merge-0.xml", "tobago-config-merge-1.xml");
Assertions.assertSame(config.getContentSecurityPolicy().getMode(), ContentSecurityPolicy.Mode.REPORT_ONLY);
final Map<String, String> directiveMap = config.getContentSecurityPolicy().getDirectiveMap();
Assertions.assertEquals(2, directiveMap.size());
Assertions.assertEquals("'self'", directiveMap.get("default-src"));
Assertions.assertEquals("http://apache.org", directiveMap.get("image-src"));
}
@Test
public void testContentSecurityPolicyOff() {
final TobagoConfig config = new TobagoConfig(null, "tobago-config-merge-0.xml", "tobago-config-merge-1.xml",
"tobago-config-merge-2.xml");
Assertions.assertSame(config.getContentSecurityPolicy().getMode(), ContentSecurityPolicy.Mode.OFF);
Assertions.assertEquals(2, config.getContentSecurityPolicy().getDirectiveMap().size());
}
@Test
public void testContentSecurityPolicyNameAttribute() {
final TobagoConfig config =
new TobagoConfig(null, "tobago-config-merge-0.xml", "tobago-config-merge-3.xml");
Assertions.assertSame(config.getContentSecurityPolicy().getMode(), ContentSecurityPolicy.Mode.ON);
final Map<String, String> directiveMap = config.getContentSecurityPolicy().getDirectiveMap();
Assertions.assertEquals(1, directiveMap.size());
Assertions.assertEquals("'self' https:", directiveMap.get("default-src"));
}
@Test
public void testMimeTypes() {
final TobagoConfig config = new TobagoConfig(null, "tobago-config-merge-0.xml", "tobago-config-merge-1.xml",
"tobago-config-merge-2.xml");
final Map<String, String> mimeTypes = config.getMimeTypes();
Assertions.assertEquals(3, mimeTypes.size());
Assertions.assertEquals("test/one", mimeTypes.get("test-1"));
Assertions.assertEquals("test/zwei", mimeTypes.get("test-2"));
Assertions.assertEquals("test/three", mimeTypes.get("test-3"));
}
@Test
public void testResourcePriority() {
final TobagoConfig config =
new TobagoConfig(null, "tobago-config-5.0.xml", "tobago-config-5.0-replace.xml");
final String[] expected = new String[]{
"script-1.js",
"script-2.js",
"script-3-replacement.js",
"script-4.js",
"script-5.js",
"script-undefined-a.js",
"script-undefined-b.js",
"script-undefined-c.js",
"script-undefined-d.js",
"script-undefined-e.js"
};
final ThemeScript[] ex = new ThemeScript[expected.length];
int i = 0;
for (String script : expected) {
ex[i] = new ThemeScript();
ex[i++].setName(script);
}
// config.resolveThemes();
final Theme defaultTheme = config.getDefaultTheme();
final ThemeScript[] scripts = defaultTheme.getScriptResources(true);
Assertions.assertArrayEquals(ex, scripts);
Assertions.assertEquals("some-version-2", defaultTheme.getVersion());
}
@Test
public void testMergeThemePatch() {
final TobagoConfig config12 =
new TobagoConfig(null, "tobago-config-theme-merge-1.xml", "tobago-config-theme-merge-2.xml");
Assertions.assertEquals("2.0", config12.getDefaultTheme().getVersion());
final ThemeScript[] scripts12 = config12.getDefaultTheme().getScriptResources(false);
Assertions.assertEquals(2, scripts12.length);
Assertions.assertEquals("script-1", scripts12[0].getName());
Assertions.assertEquals("script-2", scripts12[1].getName());
final TobagoConfig config21 =
new TobagoConfig(null, "tobago-config-theme-merge-2.xml", "tobago-config-theme-merge-1.xml");
Assertions.assertEquals("2.0", config21.getDefaultTheme().getVersion());
final ThemeScript[] scripts21 = config21.getDefaultTheme().getScriptResources(false);
Assertions.assertEquals(2, scripts21.length);
Assertions.assertEquals("script-1", scripts21[0].getName());
Assertions.assertEquals("script-2", scripts21[1].getName());
}
}