Package co.paralleluniverse.galaxy.core

Source Code of co.paralleluniverse.galaxy.core.DistributedBranchHelperTest$MyLocalTree

/*
* Galaxy
* Copyright (C) 2012 Parallel Universe Software Co.
*
* This file is part of Galaxy.
*
* Galaxy is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* Galaxy is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Galaxy. If not, see <http://www.gnu.org/licenses/>.
*/
package co.paralleluniverse.galaxy.core;

import co.paralleluniverse.galaxy.cluster.DistributedBranchHelper;
import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableSet;
import com.google.common.primitives.Ints;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import co.paralleluniverse.galaxy.test.MockitoUtil;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.junit.Assume.*;
import org.hamcrest.Matcher;
import co.paralleluniverse.galaxy.cluster.DistributedTree.Listener;

import static co.paralleluniverse.galaxy.test.CollectionMatchers.*;
import static org.junit.matchers.JUnitMatchers.*;
import static org.hamcrest.CoreMatchers.*;
import static org.mockito.Mockito.*;
import static org.mockito.Matchers.*;
import static co.paralleluniverse.galaxy.test.MockitoUtil.*;
import java.util.Set;
import org.mockito.InOrder;

/**
*
* @author pron
*/
public class DistributedBranchHelperTest {
    static final String ROOT = "/r";
    MyLocalTree mdt;
    DistributedBranchHelper branch;
    Listener listener;

    @Before
    public void setUp() {
        reset();
    }

    private void reset() {
        mdt = new MyLocalTree();
        listener = mock(Listener.class);
        branch = null;
    }

    private void createBranch(boolean ordered) {
        final Set<String> requiredProperties = ImmutableSet.of("a", "b");
        branch = new DistributedBranchHelper(mdt.tree, ROOT, ordered) {
            @Override
            protected boolean isNodeComplete(String node, Set<String> properties) {
                return properties.containsAll(requiredProperties);
            }
        };
        branch.addListener(listener); // listener
        branch.init();
    }

    //////////////////////////////////////////////////////////////////////////////
    @Test
    public void test1() {
        createBranch(true);

        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "a");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "a", "a1");
        mdt.set(ROOT, "child1", "b", "b1");

        mdt.add(ROOT, "child2");
        mdt.add(ROOT, "child2", "a");
        mdt.add(ROOT, "child2", "b");
        mdt.set(ROOT, "child2", "a", "a2");
        mdt.set(ROOT, "child2", "b", "b2");

        InOrder inOrder = inOrder(listener);
        inOrder.verify(listener).nodeChildAdded(ROOT, "child1");
        inOrder.verify(listener).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child1", "child2")));
    }

    @Test
    public void test2() {
        for (boolean ordered : new boolean[]{false, true}) {
            createBranch(ordered);

            mdt.add(ROOT, "child1");
            mdt.add(ROOT, "child1", "a");
            mdt.add(ROOT, "child1", "b");
            mdt.set(ROOT, "child1", "b", "b1");

            mdt.add(ROOT, "child2");
            mdt.add(ROOT, "child2", "a");
            mdt.add(ROOT, "child2", "b");
            mdt.set(ROOT, "child2", "a", "a2");

            verify(listener, never()).nodeChildAdded(ROOT, "child1");
            verify(listener, never()).nodeChildAdded(ROOT, "child2");
            assertThat(branch.getChildren(), (Matcher) empty());

            reset();
        }
    }

    @Test
    public void test3() {
        createBranch(true);

        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "a");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "b", "b1");

        mdt.add(ROOT, "child2");
        mdt.add(ROOT, "child2", "a");
        mdt.add(ROOT, "child2", "b");
        mdt.set(ROOT, "child2", "a", "a2");
        mdt.set(ROOT, "child2", "b", "b2");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener, never()).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), (Matcher) empty());
    }

    @Test
    public void test3_1() {
        createBranch(false);

        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "a");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "b", "b1");

        mdt.add(ROOT, "child2");
        mdt.add(ROOT, "child2", "a");
        mdt.add(ROOT, "child2", "b");
        mdt.set(ROOT, "child2", "a", "a2");
        mdt.set(ROOT, "child2", "b", "b2");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), (Matcher) empty());
    }

    @Test
    public void test4() {
        for (boolean ordered : new boolean[]{false, true}) {
            createBranch(ordered);

            mdt.add(ROOT, "child1");
            mdt.add(ROOT, "child1", "a");
            mdt.add(ROOT, "child1", "b");
            mdt.set(ROOT, "child1", "a", "a1");
            mdt.set(ROOT, "child1", "b", "b1");

            mdt.add(ROOT, "child2");
            mdt.add(ROOT, "child2", "a");
            mdt.add(ROOT, "child2", "b");
            mdt.set(ROOT, "child2", "b", "b2");

            verify(listener).nodeChildAdded(ROOT, "child1");
            verify(listener, never()).nodeChildAdded(ROOT, "child2");
            assertThat(branch.getChildren(), equalTo(Arrays.asList("child1")));

            reset();
        }
    }

    @Test
    public void test5() {
        createBranch(true);

        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "a");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "b", "b1");

        mdt.add(ROOT, "child2");
        mdt.add(ROOT, "child2", "a");
        mdt.add(ROOT, "child2", "b");
        mdt.set(ROOT, "child2", "a", "a2");
        mdt.set(ROOT, "child2", "b", "b2");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener, never()).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), (Matcher) empty());

        mdt.set(ROOT, "child1", "a", "a1");

        InOrder inOrder = inOrder(listener);
        inOrder.verify(listener).nodeChildAdded(ROOT, "child1");
        inOrder.verify(listener).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child1", "child2")));
    }

    @Test
    public void test5_1() {
        createBranch(false);

        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "a");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "b", "b1");

        mdt.add(ROOT, "child2");
        mdt.add(ROOT, "child2", "a");
        mdt.add(ROOT, "child2", "b");
        mdt.set(ROOT, "child2", "a", "a2");
        mdt.set(ROOT, "child2", "b", "b2");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener).nodeChildAdded(ROOT, "child2");

        mdt.set(ROOT, "child1", "a", "a1");

        InOrder inOrder = inOrder(listener);
        inOrder.verify(listener).nodeChildAdded(ROOT, "child2");
        inOrder.verify(listener).nodeChildAdded(ROOT, "child1");
    }

    @Test
    public void test6() {
        for (boolean ordered : new boolean[]{false, true}) {

            mdt.add(ROOT, "child1");
            mdt.add(ROOT, "child1", "a");
            mdt.add(ROOT, "child1", "b");
            mdt.set(ROOT, "child1", "a", "a1");
            mdt.set(ROOT, "child1", "b", "b1");

            mdt.add(ROOT, "child2");
            mdt.add(ROOT, "child2", "a");
            mdt.add(ROOT, "child2", "b");
            mdt.set(ROOT, "child2", "a", "a2");
            mdt.set(ROOT, "child2", "b", "b2");

            createBranch(ordered);

            InOrder inOrder = inOrder(listener);
            inOrder.verify(listener).nodeChildAdded(ROOT, "child1");
            inOrder.verify(listener).nodeChildAdded(ROOT, "child2");
            assertThat(branch.getChildren(), equalTo(Arrays.asList("child1", "child2")));

            reset();
        }
    }

    @Test
    public void test7() {
        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "b", "b1");

        assertThat(mdt.tree.getChildren(ROOT), equalTo(Arrays.asList("child1")));

        createBranch(true);

        mdt.add(ROOT, "child2");
        mdt.add(ROOT, "child2", "a");
        mdt.add(ROOT, "child2", "b");
        mdt.set(ROOT, "child2", "a", "a2");
        mdt.set(ROOT, "child2", "b", "b2");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener, never()).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), (Matcher) empty());

        mdt.add(ROOT, "child1", "a");
        mdt.set(ROOT, "child1", "a", "a1");

        InOrder inOrder = inOrder(listener);
        inOrder.verify(listener).nodeChildAdded(ROOT, "child1");
        inOrder.verify(listener).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child1", "child2")));
    }

    @Test
    public void test8() {
        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "b", "b1");

        assertThat(mdt.tree.getChildren(ROOT), equalTo(Arrays.asList("child1")));

        createBranch(true);

        mdt.add(ROOT, "child2");
        mdt.add(ROOT, "child2", "a");
        mdt.add(ROOT, "child2", "b");
        mdt.set(ROOT, "child2", "a", "a2");
        mdt.set(ROOT, "child2", "b", "b2");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener, never()).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), (Matcher) empty());

        mdt.remove(ROOT, "child1");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child2")));
    }

    @Test
    public void test9() {
        createBranch(true);

        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "b", "b1");

        mdt.add(ROOT, "child2");
        mdt.add(ROOT, "child2", "a");
        mdt.add(ROOT, "child2", "b");
        mdt.set(ROOT, "child2", "a", "a2");
        mdt.set(ROOT, "child2", "b", "b2");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener, never()).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), (Matcher) empty());

        mdt.remove(ROOT, "child1");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child2")));
    }

    @Test
    public void test10() {
        createBranch(true);

        mdt.add(ROOT, "child0");
        mdt.add(ROOT, "child0", "a");
        mdt.add(ROOT, "child0", "b");
        mdt.set(ROOT, "child0", "a", "a0");
        mdt.set(ROOT, "child0", "b", "b0");

        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "b", "b1");

        mdt.add(ROOT, "child2");
        mdt.add(ROOT, "child2", "a");
        mdt.add(ROOT, "child2", "b");
        mdt.set(ROOT, "child2", "a", "a2");
        mdt.set(ROOT, "child2", "b", "b2");

        verify(listener).nodeChildAdded(ROOT, "child0");
        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener, never()).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child0")));

        mdt.remove(ROOT, "child1");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child0", "child2")));
    }

    @Test
    public void test11() {
        mdt.add(ROOT, "child0");
        mdt.add(ROOT, "child0", "a");
        mdt.add(ROOT, "child0", "b");
        mdt.set(ROOT, "child0", "a", "a0");
        mdt.set(ROOT, "child0", "b", "b0");

        createBranch(true);

        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "b", "b1");

        mdt.add(ROOT, "child2");
        mdt.add(ROOT, "child2", "a");
        mdt.add(ROOT, "child2", "b");
        mdt.set(ROOT, "child2", "a", "a2");
        mdt.set(ROOT, "child2", "b", "b2");

        verify(listener).nodeChildAdded(ROOT, "child0");
        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener, never()).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child0")));

        mdt.remove(ROOT, "child1");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child0", "child2")));
    }

    @Test
    public void test12() {
        mdt.add(ROOT, "child0");
        mdt.add(ROOT, "child0", "a");
        mdt.add(ROOT, "child0", "b");
        mdt.set(ROOT, "child0", "a", "a0");
        mdt.set(ROOT, "child0", "b", "b0");

        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "b", "b1");

        mdt.add(ROOT, "child2");
        mdt.add(ROOT, "child2", "a");
        mdt.add(ROOT, "child2", "b");
        mdt.set(ROOT, "child2", "a", "a2");
        mdt.set(ROOT, "child2", "b", "b2");

        createBranch(true);

        verify(listener).nodeChildAdded(ROOT, "child0");
        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener, never()).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child0")));

        mdt.remove(ROOT, "child1");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        verify(listener).nodeChildAdded(ROOT, "child2");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child0", "child2")));
    }

    @Test
    public void test13() {
        mdt.add(ROOT, "child0");
        mdt.add(ROOT, "child0", "a");
        mdt.add(ROOT, "child0", "b");
        mdt.set(ROOT, "child0", "a", "a0");
        mdt.set(ROOT, "child0", "b", "b0");

        mdt.add(ROOT, "child1");
        mdt.add(ROOT, "child1", "b");
        mdt.set(ROOT, "child1", "b", "b1");

        createBranch(true);

        verify(listener).nodeChildAdded(ROOT, "child0");
        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child0")));

        mdt.remove(ROOT, "child1");

        verify(listener, never()).nodeChildAdded(ROOT, "child1");
        assertThat(branch.getChildren(), equalTo(Arrays.asList("child0")));
    }
///////////////////////////////////////////////////////////////////////////////////////////
    static Listener PRINTER = new Listener() {
        @Override
        public void nodeAdded(String node) {
            System.out.println("nodeAdded(" + node + ")");
        }

        @Override
        public void nodeDeleted(String node) {
            System.out.println("nodeRemoved(" + node + ")");
        }

        @Override
        public void nodeUpdated(String node) {
            System.out.println("nodeUpdated(" + node + ")");
        }

        @Override
        public void nodeChildAdded(String node, String child) {
            System.out.println("nodeChildAdded(" + node + ", " + child + ")");
        }

        @Override
        public void nodeChildDeleted(String node, String child) {
            System.out.println("nodeChildRemoved(" + node + ", " + child + ")");
        }

        @Override
        public void nodeChildUpdated(String node, String child) {
            System.out.println("nodeChildUpdated(" + node + ", " + child + ")");
        }
    };

    private static class MyLocalTree {
        private static final String SEP = "/";
        private final LocalTree tree;
        public MyLocalTree() {
            this.tree = new LocalTree();
        }

        private void remove(String ROOT, String child1) {
            tree.delete(ROOT+SEP+child1);
        }

        private void add(String ROOT, String child1) {
            tree.create(ROOT+SEP+child1, false);
        }

        private void add(String ROOT, String child2, String a) {
            tree.create(ROOT+SEP+child2+SEP+a, false);
        }

        private void set(String ROOT, String child0, String a, String a0) {
            tree.set(ROOT+SEP+child0+SEP+a,a0.getBytes());
        }
    }
}
TOP

Related Classes of co.paralleluniverse.galaxy.core.DistributedBranchHelperTest$MyLocalTree

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.