org.springframework.ide.eclipse.boot.dash.test.PropertyFileStoreTest.java Source code

Java tutorial

Introduction

Here is the source code for org.springframework.ide.eclipse.boot.dash.test.PropertyFileStoreTest.java

Source

/*******************************************************************************
 * Copyright (c) 2016 Pivotal, Inc.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Pivotal, Inc. - initial API and implementation
 *******************************************************************************/
package org.springframework.ide.eclipse.boot.dash.test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.PosixFilePermission;
import java.util.EnumSet;
import java.util.Random;
import java.util.Set;

import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.ide.eclipse.boot.dash.metadata.PropertyFileStore;
import org.springsource.ide.eclipse.commons.core.util.OsUtils;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;

public class PropertyFileStoreTest {

    static Random rnd = new Random();

    File file;

    @Before
    public void setup() {
        file = new File("test-" + rnd.nextInt(10000000) + ".properties");
    }

    @After
    public void tearDown() {
        FileUtils.deleteQuietly(file);
    }

    @Test
    public void basicStoreAndReload() throws Exception {
        {
            PropertyFileStore store = new PropertyFileStore(file);
            assertTrue(store.isEmpty());

            store.put("test", "something");
            store.put("foo", "bar");
            assertFalse(store.isEmpty());

            assertProperties(store, "test", "something", "foo", "bar");

            store.sync();
            assertPermissions(file);
        }

        {
            PropertyFileStore store = new PropertyFileStore(file);

            assertProperties(store, "test", "something", "foo", "bar");
        }
    }

    @Test
    public void putNullValues() throws Exception {
        //Putting null values is supposed to be equivalent to removing a property.
        {
            PropertyFileStore store = new PropertyFileStore(file);
            assertTrue(store.isEmpty());

            store.put("test", "something");
            store.put("foo", "bar");
            assertFalse(store.isEmpty());

            assertProperties(store, "test", "something", "foo", "bar");

            store.put("test", null);

            assertProperties(store, "foo", "bar");

            store.sync(); //Before reloading it we must be sure all is saved.
            // Store saving is automatic, but not synchronous.
        }

        {
            PropertyFileStore store = new PropertyFileStore(file);

            assertProperties(store, "foo", "bar");
        }
    }

    private void assertProperties(PropertyFileStore store, String... propsAndValues) {
        assertTrue("Numer of props and value must be even (alternating prop and value)",
                propsAndValues.length % 2 == 0);
        Builder<String, String> builder = ImmutableMap.builder();
        String p = null, v;
        for (int i = 0; i < propsAndValues.length; i++) {
            if (i % 2 == 0) {
                p = propsAndValues[i];
            } else {
                v = propsAndValues[i];
                builder.put(p, v);
            }
        }
        ImmutableMap<String, String> expected = builder.build();
        assertEquals(expected, store.asMap());
    }

    private static void assertPermissions(File file) throws IOException {
        if (OsUtils.isWindows()) {
            //skip windows for now
        } else {
            Path path = file.toPath();
            Set<PosixFilePermission> perms = Files.getPosixFilePermissions(path);
            assertEquals(EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE), perms);
        }
    }
}