Package org.locationtech.geogig.storage

Source Code of org.locationtech.geogig.storage.GraphDatabaseTest

/* Copyright (c) 2013-2014 Boundless and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Distribution License v1.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/edl-v10.html
*
* Contributors:
* David Winslow (Boundless) - initial implementation
*/
package org.locationtech.geogig.storage;

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

import java.io.File;
import java.io.IOException;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.locationtech.geogig.api.ObjectId;
import org.locationtech.geogig.api.Platform;
import org.locationtech.geogig.api.TestPlatform;

import com.google.common.collect.ImmutableList;

/**
* Abstract test suite for {@link GraphDatabase} implementations.
* <p>
* Create a concrete subclass of this test suite and implement {@link #createInjector()} so that
* {@code GraphDtabase.class} is bound to your implementation instance as a singleton.
*/
public abstract class GraphDatabaseTest {

    protected GraphDatabase database;

    protected TestPlatform platform;

    @Rule
    public TemporaryFolder tmpFolder = new TemporaryFolder();

    @Before
    public void setUp() throws Exception {
        File root = tmpFolder.getRoot();
        tmpFolder.newFolder(".geogig");
        platform = new TestPlatform(root);
        platform.setUserHome(tmpFolder.newFolder("fake_home"));
        database = createDatabase(platform);
        database.open();
    }

    @After
    public void tearDown() throws Exception {
        if (database != null) {
            database.close();
        }
    }

    protected abstract GraphDatabase createDatabase(Platform platform) throws Exception;

    @Test
    public void testNodes() throws IOException {
        ObjectId rootId = ObjectId.forString("root");
        ImmutableList<ObjectId> parents = ImmutableList.of();
        database.put(rootId, parents);
        ObjectId commit1 = ObjectId.forString("c1");
        parents = ImmutableList.of(rootId);
        database.put(commit1, parents);
        ObjectId commit2 = ObjectId.forString("c2");
        parents = ImmutableList.of(commit1);
        database.put(commit2, parents);

        ImmutableList<ObjectId> children = database.getChildren(commit2);
        parents = database.getParents(commit2);
        assertTrue(database.exists(commit2));
        assertEquals("Size of " + children, 0, children.size());
        assertEquals(1, parents.size());
        assertEquals(commit1, parents.get(0));
        children = database.getChildren(commit1);
        parents = database.getParents(commit1);
        assertTrue(database.exists(commit1));
        assertEquals(1, children.size());
        assertEquals(commit2, children.get(0));
        assertEquals(1, parents.size());
        assertEquals(rootId, parents.get(0));
        children = database.getChildren(rootId);
        parents = database.getParents(rootId);
        assertTrue(database.exists(rootId));
        assertEquals(1, children.size());
        assertEquals(commit1, children.get(0));
        assertEquals(0, parents.size());
    }

    @Test
    public void testMapNode() throws IOException {
        ObjectId commitId = ObjectId.forString("commitId");
        ObjectId mappedId = ObjectId.forString("mapped");
        database.put(commitId, new ImmutableList.Builder<ObjectId>().build());
        database.put(mappedId, new ImmutableList.Builder<ObjectId>().build());
        database.map(mappedId, commitId);
        ObjectId mapping = database.getMapping(mappedId);
        assertEquals(commitId + " : " + mappedId + " : " + mapping, commitId, mapping);

        // update mapping
        ObjectId commitId2 = ObjectId.forString("commitId2");
        database.map(mappedId, commitId2);
        mapping = database.getMapping(mappedId);
        assertEquals(commitId2 + " : " + mappedId + " : " + mapping, commitId2, mapping);
    }

    @Test
    public void testDepth() throws IOException {
        // Create the following revision graph
        // x o - root commit
        // | |\
        // | | o - commit1
        // | | |
        // | | o - commit2
        // | | |\
        // | | | o - commit3
        // | | | |\
        // | | | | o - commit4
        // | | | | |
        // | | | o | - commit5
        // | | | |/
        // | | | o - commit6
        // | | |
        // | o | - commit7
        // | | |
        // | | o - commit8
        // | |/
        // | o - commit9
        // |
        // o - commit10
        // |
        // o - commit11
        ObjectId rootId = ObjectId.forString("root commit");
        ImmutableList<ObjectId> parents = ImmutableList.of();
        database.put(rootId, parents);
        ObjectId commit1 = ObjectId.forString("commit1");
        parents = ImmutableList.of(rootId);
        database.put(commit1, parents);
        ObjectId commit2 = ObjectId.forString("commit2");
        parents = ImmutableList.of(commit1);
        database.put(commit2, parents);
        ObjectId commit3 = ObjectId.forString("commit3");
        parents = ImmutableList.of(commit2);
        database.put(commit3, parents);
        ObjectId commit4 = ObjectId.forString("commit4");
        parents = ImmutableList.of(commit3);
        database.put(commit4, parents);
        ObjectId commit5 = ObjectId.forString("commit5");
        parents = ImmutableList.of(commit3);
        database.put(commit5, parents);
        ObjectId commit6 = ObjectId.forString("commit6");
        parents = ImmutableList.of(commit5, commit4);
        database.put(commit6, parents);
        ObjectId commit7 = ObjectId.forString("commit7");
        parents = ImmutableList.of(rootId);
        database.put(commit7, parents);
        ObjectId commit8 = ObjectId.forString("commit8");
        parents = ImmutableList.of(commit2);
        database.put(commit8, parents);
        ObjectId commit9 = ObjectId.forString("commit9");
        parents = ImmutableList.of(commit7, commit8);
        database.put(commit9, parents);
        ObjectId commit10 = ObjectId.forString("commit10");
        parents = ImmutableList.of();
        database.put(commit10, parents);
        ObjectId commit11 = ObjectId.forString("commit11");
        parents = ImmutableList.of(commit10);
        database.put(commit11, parents);

        System.out.println("Testing depth");
        assertEquals(0, database.getDepth(rootId));
        System.out.println("Testing depth 9");
        assertEquals(2, database.getDepth(commit9));
        System.out.println("Testing depth 8");
        assertEquals(3, database.getDepth(commit8));
        System.out.println("Testing depth 6");
        assertEquals(5, database.getDepth(commit6));
        System.out.println("Testing depth 4");
        assertEquals(4, database.getDepth(commit4));
        System.out.println("Testing depth 11");
        assertEquals(1, database.getDepth(commit11));
    }
}
TOP

Related Classes of org.locationtech.geogig.storage.GraphDatabaseTest

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.