summaryrefslogtreecommitdiff
path: root/src/test/java/com/amazon/carbonado/repo/indexed/TestIndexEntryGenerator.java
blob: 7ded9813fbb4bced856035222adaea54ceb5c7b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
 * Copyright 2006-2012 Amazon Technologies, Inc. or its affiliates.
 * Amazon, Amazon.com and Carbonado are trademarks or registered trademarks
 * of Amazon Technologies, Inc. or its affiliates.  All rights reserved.
 *
 * 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 com.amazon.carbonado.repo.indexed;

import java.util.Map;

import junit.framework.TestSuite;
import com.amazon.carbonado.synthetic.SyntheticStorableReferenceAccess;
import com.amazon.carbonado.synthetic.TestSyntheticStorableBuilders;
import com.amazon.carbonado.info.StorableIndex;
import com.amazon.carbonado.info.StorableInfo;
import com.amazon.carbonado.info.StorableIntrospector;
import com.amazon.carbonado.info.StorableProperty;
import com.amazon.carbonado.info.Direction;
import com.amazon.carbonado.Storable;

import com.amazon.carbonado.stored.StorableTestBasic;

/**
 *
 *
 * @author Brian S O'Neill
 */
public class TestIndexEntryGenerator extends TestSyntheticStorableBuilders {
    public static void main(String[] args) {
        junit.textui.TestRunner.run(suite());
    }

    public static TestSuite suite() {
        return new TestSuite(TestIndexEntryGenerator.class);
    }

    public TestIndexEntryGenerator(String name) {
        super(name);
    }

    /**
     * test index generator
     */
    public void test_IndexGenerator() throws Exception {
        for (TestSyntheticStorableBuilders.TestDef test : TestSyntheticStorableBuilders.TESTS) {
            StorableIndex<StorableTestBasic> indexDesc = newStorableIndex(test);
            SyntheticStorableReferenceAccess<StorableTestBasic> access =
                IndexEntryGenerator.getIndexAccess(indexDesc);

            Class s = access.getReferenceClass();

            validateIndexEntry(test, s);
            exerciseStorable(s);

            StorableTestBasic master =
                mRepository.storageFor(StorableTestBasic.class).prepare();
            populate(master);
            master.insert();

            Storable index = mRepository.storageFor(s).prepare();
            access.copyFromMaster(index, master);
            index.insert();

            Storable indexChecker = mRepository.storageFor(s).prepare();
            access.copyFromMaster(indexChecker, master);
            assertTrue(indexChecker.tryLoad());

            StorableTestBasic masterChecker =
                mRepository.storageFor(StorableTestBasic.class).prepare();
            access.copyToMasterPrimaryKey(indexChecker, masterChecker);
            masterChecker.load();
            assertEquals(master, masterChecker);

            assertTrue(access.isConsistent(index, master));
            masterChecker =
                mRepository.storageFor(StorableTestBasic.class).prepare();
            master.copyAllProperties(masterChecker);
            assertTrue(access.isConsistent(index, masterChecker));
            masterChecker.setId(-42);
            assertFalse(access.isConsistent(index, masterChecker));

        }
    }

    /**
     * @param test
     * @return StorableInfo for this test
     */
    private StorableIndex<StorableTestBasic> newStorableIndex(TestSyntheticStorableBuilders.TestDef test) {
        StorableInfo info = StorableIntrospector.examine(test.mClass);
        final Map<String, ? extends StorableProperty> allProps = info.getAllProperties();

        TestSyntheticStorableBuilders.IndexDef[] indexDefinitions = test.mProps;
        StorableProperty[] props = new StorableProperty[indexDefinitions.length];
        Direction[] dirs = new Direction[indexDefinitions.length];
        int i = 0;
        for (TestSyntheticStorableBuilders.IndexDef p : indexDefinitions) {
            props[i] = allProps.get(p.getProp());
            dirs[i] = p.getDir();
            i++;
        }
        StorableIndex<StorableTestBasic> index = new StorableIndex<StorableTestBasic>(props, dirs);
        return index;
    }


}