org.janusgraph.diskstorage.configuration.ConfigurationTest.java Source code

Java tutorial

Introduction

Here is the source code for org.janusgraph.diskstorage.configuration.ConfigurationTest.java

Source

// Copyright 2017 JanusGraph Authors
//
// 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.

package org.janusgraph.diskstorage.configuration;

import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import org.janusgraph.core.util.ReflectiveConfigOptionLoader;
import org.janusgraph.diskstorage.configuration.backend.CommonsConfiguration;
import org.janusgraph.graphdb.configuration.GraphDatabaseConfiguration;
import org.apache.commons.configuration.BaseConfiguration;
import org.junit.Test;

import javax.annotation.Nullable;

import static org.junit.Assert.*;

/**
 * @author Matthias Broecheler (me@matthiasb.com)
 */
public class ConfigurationTest {

    @Test
    public void testConfigHierarchy() {
        ConfigNamespace root = new ConfigNamespace(null, "config", "root");
        ConfigNamespace indexes = new ConfigNamespace(root, "indexes", "Index definitions", true);
        ConfigNamespace storage = new ConfigNamespace(root, "storage", "Storage definitions");
        ConfigNamespace special = new ConfigNamespace(storage, "special", "Special storage definitions");
        ConfigOption<String[]> hostnames = new ConfigOption<String[]>(storage, "hostname",
                "Storage backend hostname", ConfigOption.Type.LOCAL, String[].class);
        ConfigOption<Boolean> partition = new ConfigOption<Boolean>(storage, "partition",
                "whether to enable partition", ConfigOption.Type.MASKABLE, false);
        ConfigOption<Long> locktime = new ConfigOption<Long>(storage, "locktime", "how long to lock",
                ConfigOption.Type.FIXED, 500l);
        ConfigOption<Byte> bits = new ConfigOption<Byte>(storage, "bits", "number of unique bits",
                ConfigOption.Type.GLOBAL_OFFLINE, (byte) 8);
        ConfigOption<Short> retry = new ConfigOption<Short>(special, "retry", "retry wait time",
                ConfigOption.Type.GLOBAL, (short) 200);
        ConfigOption<Double> bar = new ConfigOption<Double>(special, "bar", "bar", ConfigOption.Type.GLOBAL, 1.5d);
        ConfigOption<Integer> bim = new ConfigOption<Integer>(special, "bim", "bim", ConfigOption.Type.MASKABLE,
                Integer.class);

        ConfigOption<String> indexback = new ConfigOption<String>(indexes, "name", "index name",
                ConfigOption.Type.MASKABLE, String.class);
        ConfigOption<Integer> ping = new ConfigOption<Integer>(indexes, "ping", "ping time",
                ConfigOption.Type.LOCAL, 100);
        ConfigOption<Boolean> presort = new ConfigOption<Boolean>(indexes, "presort", "presort result set",
                ConfigOption.Type.LOCAL, false);

        //Local configuration
        ModifiableConfiguration config = new ModifiableConfiguration(root,
                new CommonsConfiguration(new BaseConfiguration()), BasicConfiguration.Restriction.LOCAL);
        UserModifiableConfiguration userconfig = new UserModifiableConfiguration(config);
        assertFalse(config.get(partition));
        assertEquals("false", userconfig.get("storage.partition"));
        userconfig.set("storage.partition", true);
        assertEquals("true", userconfig.get("storage.partition"));
        userconfig.set("storage.hostname", new String[] { "localhost", "some.where.org" });
        assertEquals("[localhost,some.where.org]", userconfig.get("storage.hostname"));
        userconfig.set("storage.hostname", "localhost");
        assertEquals("[localhost]", userconfig.get("storage.hostname"));
        assertEquals("null", userconfig.get("storage.special.bim"));
        assertEquals("", userconfig.get("indexes"));
        userconfig.set("indexes.search.name", "foo");
        assertEquals("+ search", userconfig.get("indexes").trim());
        assertEquals("foo", userconfig.get("indexes.search.name"));
        assertEquals("100", userconfig.get("indexes.search.ping"));
        userconfig.set("indexes.search.ping", 400l);
        assertEquals("400", userconfig.get("indexes.search.ping"));
        assertFalse(config.isFrozen());
        try {
            userconfig.set("storage.locktime", 500);
            fail();
        } catch (IllegalArgumentException e) {
        }
        try {
            config.set(retry, (short) 100);
            fail();
        } catch (IllegalArgumentException e) {
        }
        //        System.out.println(userconfig.get("storage"));
        userconfig.close();
        ReadConfiguration localConfig = userconfig.getConfiguration();

        config = new ModifiableConfiguration(root, new CommonsConfiguration(new BaseConfiguration()),
                BasicConfiguration.Restriction.GLOBAL);
        userconfig = new UserModifiableConfiguration(config);

        userconfig.set("storage.locktime", 1111);
        userconfig.set("storage.bits", 5);
        userconfig.set("storage.special.retry", 222);
        assertEquals("5", userconfig.get("storage.bits"));
        assertEquals("222", userconfig.get("storage.special.retry"));

        config.freezeConfiguration();
        userconfig.set("storage.special.retry", 333);
        assertEquals("333", userconfig.get("storage.special.retry"));
        try {
            userconfig.set("storage.bits", 6);
        } catch (IllegalArgumentException e) {
        }
        userconfig.set("storage.bits", 6);
        try {
            userconfig.set("storage.locktime", 1221);
        } catch (IllegalArgumentException e) {
        }
        try {
            userconfig.set("storage.locktime", 1221);
        } catch (IllegalArgumentException e) {
        }
        userconfig.set("indexes.find.name", "lulu");

        userconfig.close();
        ReadConfiguration globalConfig = userconfig.getConfiguration();

        MixedConfiguration mixed = new MixedConfiguration(root, globalConfig, localConfig);
        assertEquals(ImmutableSet.of("search", "find"), mixed.getContainedNamespaces(indexes));
        Configuration search = mixed.restrictTo("search");
        assertEquals("foo", search.get(indexback));
        assertEquals(400, search.get(ping).intValue());
        assertEquals(100, mixed.get(ping, "find").intValue());
        assertEquals(false, mixed.get(presort, "find").booleanValue());
        assertEquals(400, mixed.get(ping, "search").intValue());
        assertEquals(false, mixed.get(presort, "search").booleanValue());
        assertFalse(mixed.has(bim));
        assertTrue(mixed.has(bits));
        assertEquals(5, mixed.getSubset(storage).size());

        assertEquals(1.5d, mixed.get(bar).doubleValue(), 0.0);
        assertEquals("localhost", mixed.get(hostnames)[0]);
        assertEquals(1111, mixed.get(locktime).longValue());

        mixed.close();

        //System.out.println(ConfigElement.toString(root));

    }

    @Test
    public void testDisableConfOptReflection() {
        ReflectiveConfigOptionLoader.INSTANCE.setEnabled(false);
        ReflectiveConfigOptionLoader.INSTANCE.loadStandard(this.getClass());

        assertFalse(Iterables.any(GraphDatabaseConfiguration.LOG_NS.getChildren(), new Predicate<ConfigElement>() {
            @Override
            public boolean apply(ConfigElement elem) {
                return elem instanceof ConfigOption<?> && elem.getName().equals("max-write-time");
            }
        }));

        ReflectiveConfigOptionLoader.INSTANCE.setEnabled(true);
        ReflectiveConfigOptionLoader.INSTANCE.loadStandard(this.getClass());

        assertTrue(Iterables.any(GraphDatabaseConfiguration.LOG_NS.getChildren(), new Predicate<ConfigElement>() {
            @Override
            public boolean apply(ConfigElement elem) {
                return elem instanceof ConfigOption<?> && elem.getName().equals("max-write-time");
            }
        }));
    }
}