summaryrefslogtreecommitdiffstats
path: root/pki/base/common/test/com/netscape/cmscore/request/RequestRecordTest.java
blob: ba3689fbcede2c6c5cf8519ae0258425385199f3 (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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
package com.netscape.cmscore.request;

import java.util.Hashtable;

import junit.framework.Test;
import junit.framework.TestSuite;

import com.netscape.certsrv.base.EBaseException;
import com.netscape.certsrv.dbs.EDBException;
import com.netscape.certsrv.dbs.IDBAttrMapper;
import com.netscape.certsrv.dbs.IDBDynAttrMapper;
import com.netscape.certsrv.dbs.IDBRegistry;
import com.netscape.certsrv.dbs.ModificationSet;
import com.netscape.certsrv.request.IRequestRecord;
import com.netscape.certsrv.request.RequestId;
import com.netscape.cmscore.dbs.DBRegistryDefaultStub;
import com.netscape.cmscore.dbs.DBSubsystemDefaultStub;
import com.netscape.cmscore.test.CMSBaseTestCase;
import com.netscape.cmscore.test.TestHelper;

public class RequestRecordTest extends CMSBaseTestCase {

    RequestRecord requestRecord;
    Request request;

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

    public void cmsTestSetUp() {
        requestRecord = new RequestRecord();
        request = new Request(new RequestId("testid"));
    }

    public void cmsTestTearDown() {
    }

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

    public void testGetExtData() {
        Hashtable hash = new Hashtable();

        assertNotSame(hash, requestRecord.get(IRequestRecord.ATTR_EXT_DATA));
        requestRecord.mExtData = hash;
        assertSame(hash, requestRecord.get(IRequestRecord.ATTR_EXT_DATA));
    }

    public void testSetExtData() {
        Hashtable hash = new Hashtable();

        assertNotSame(requestRecord.mExtData, hash);
        requestRecord.set(IRequestRecord.ATTR_EXT_DATA, hash);
        assertSame(requestRecord.mExtData, hash);
    }

    public void testGetElements() {
        assertTrue(TestHelper.enumerationContains(requestRecord.getElements(),
                           IRequestRecord.ATTR_EXT_DATA));
    }

    public void testAddExtData() throws EBaseException {
        request.setExtData("foo", "bar");
        Hashtable requestHashValue = new Hashtable();
        requestHashValue.put("red", "rum");
        requestHashValue.put("blue", "gin");
        request.setExtData("hashkey", requestHashValue);

        requestRecord.add(request);

        assertEquals(request.mExtData,  requestRecord.mExtData);
        assertNotSame(request.mExtData, requestRecord.mExtData);
    }

    public void testReadExtData() throws EBaseException {
        Hashtable extData = new Hashtable();
        extData.put("foo", "bar");
        Hashtable extDataHashValue = new Hashtable();
        extDataHashValue.put("red", "rum");
        extDataHashValue.put("blue", "gin");
        extData.put("hashkey", extDataHashValue);
        requestRecord.set(IRequestRecord.ATTR_EXT_DATA, extData);
        requestRecord.mRequestType = "foo";


        requestRecord.read(new RequestModDefaultStub(), request);

        // the request stores other attributes inside its mExtData when some
        // of its setters are called, so we have to compare manually.
        assertEquals("bar", request.mExtData.get("foo"));
        assertEquals(extDataHashValue, request.mExtData.get("hashkey"));
        assertNotSame(requestRecord.mExtData, request.mExtData);
    }

    public void testModExtData() throws EBaseException {
        ModificationSetStub mods = new ModificationSetStub();
        request.setExtData("foo", "bar");

        RequestRecord.mod(mods, request);

        assertTrue(mods.addCalledWithExtData);
        assertEquals(mods.addExtDataObject, request.mExtData);
    }

    public void testRegister() throws EDBException {
        DBSubsystemStub db = new DBSubsystemStub();

        RequestRecord.register(db);

        assertTrue(db.registry.registerCalledWithExtAttr);
        assertTrue(db.registry.extAttrMapper instanceof ExtAttrDynMapper);

        assertTrue(db.registry.registerObjectClassCalled);
        assertTrue(TestHelper.contains(db.registry.registerObjectClassLdapNames,
                                       "extensibleObject"));
        
        assertTrue(db.registry.registerDynamicMapperCalled);
        assertTrue(db.registry.dynamicMapper instanceof ExtAttrDynMapper);
    }


    class ModificationSetStub extends ModificationSet {
        public boolean addCalledWithExtData = false;
        public Object addExtDataObject = null;

        public void add(String name, int op, Object value) {
            if (IRequestRecord.ATTR_EXT_DATA.equals(name)) {
                addCalledWithExtData = true;
                addExtDataObject = value;
            }
        }
    }


    class DBSubsystemStub extends DBSubsystemDefaultStub {
        DBRegistryStub registry = new DBRegistryStub();


        public IDBRegistry getRegistry() {
            return registry;
        }
    }


    class DBRegistryStub extends DBRegistryDefaultStub {
        boolean registerCalledWithExtAttr = false;
        IDBAttrMapper extAttrMapper = null;

        boolean registerObjectClassCalled = false;
        String[] registerObjectClassLdapNames = null;

        private boolean registerDynamicMapperCalled = false;
        private IDBDynAttrMapper dynamicMapper;

        public void registerObjectClass(String className, String ldapNames[]) throws EDBException {
            registerObjectClassCalled = true;
            registerObjectClassLdapNames = ldapNames;
        }

        public void registerAttribute(String ufName, IDBAttrMapper mapper) throws EDBException {
            if (IRequestRecord.ATTR_EXT_DATA.equals(ufName)) {
                registerCalledWithExtAttr = true;
                extAttrMapper = mapper;
            }
        }

        public void registerDynamicMapper(IDBDynAttrMapper mapper) {
            registerDynamicMapperCalled = true;
            dynamicMapper = mapper;
        }
    }
}