Statistics
| Revision:

gvsig-projects-pool / org.gvsig.vcsgis / trunk / org.gvsig.vcsgis / org.gvsig.vcsgis.lib / org.gvsig.vcsgis.lib.impl / src / test / java / org / gvsig / vcsgis / lib / impl / server / TestS04Row.java @ 2725

History | View | Annotate | Download (9.2 KB)

1
package org.gvsig.vcsgis.lib.impl.server;
2

    
3
import java.io.ByteArrayInputStream;
4
import java.io.File;
5
import java.io.InputStream;
6
import java.net.URL;
7
import java.sql.Timestamp;
8
import java.util.Map;
9
import junit.framework.TestCase;
10
import static junit.framework.TestCase.assertEquals;
11
import org.apache.commons.io.FileUtils;
12
import org.apache.commons.io.IOUtils;
13
import org.apache.commons.lang3.StringUtils;
14
import org.gvsig.fmap.dal.feature.EditableFeature;
15
import org.gvsig.fmap.dal.feature.FeatureStore;
16
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
17
import org.gvsig.tools.dispose.DisposeUtils;
18
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
19
import org.gvsig.vcsgis.lib.SequentialCodeGenerator;
20
import org.gvsig.vcsgis.lib.VCSGisLocator;
21
import org.gvsig.vcsgis.lib.VCSGisManager;
22
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_OK;
23
import org.gvsig.vcsgis.lib.impl.TestUtils;
24
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspace;
25
import org.gvsig.vcsgis.lib.repository.VCSGisRepository;
26
import org.gvsig.vcsgis.lib.repository.remoteclient.requests.RowCreateRequestClient;
27
import org.gvsig.vcsgis.lib.repository.remoteclient.requests.RowDeleteRequestClient;
28
import org.gvsig.vcsgis.lib.repository.remoteclient.requests.RowUpdateRequestClient;
29
import org.gvsig.vcsgis.lib.server.VCSGisServerController;
30
import org.gvsig.vcsgis.lib.server.VCSGisServerHandler;
31
import org.gvsig.vcsgis.lib.server.handlers.RowCreateHandler;
32
import org.slf4j.Logger;
33
import org.slf4j.LoggerFactory;
34

    
35
public class TestS04Row extends TestCase {
36

    
37
    private static final Logger LOGGER = LoggerFactory.getLogger(TestS04Row.class);
38

    
39
    public TestS04Row(String testName) {
40
        super(testName);
41
    }
42

    
43
    @Override
44
    protected void setUp() throws Exception {
45
        super.setUp();
46
        new DefaultLibrariesInitializer().fullInitialize();
47
    }
48

    
49
    @Override
50
    protected void tearDown() throws Exception {
51
        super.tearDown();
52
    }
53

    
54
    // TODO add test methods here. The name must begin with 'test'. For example:
55
    // public void testHello() {}
56
    
57
    public void testRowXXXHandler() throws Exception {
58
        final String testid = "RowXXXHandler";
59
        final URL serverUrl = new URL("http://localhost:9810/");
60

    
61
        VCSGisManager manager = VCSGisLocator.getVCSGisManager();
62
        manager.setCodeGenerator(new SequentialCodeGenerator());
63
        
64
        JDBCServerExplorerParameters explorerParams = TestUtils.getServerExplorerParameters("srv-"+testid);
65
        File ws1file = TestUtils.getFile(FileUtils.getFile("test-dbs","ws1-"+testid)); 
66
        File ws2file = TestUtils.getFile(FileUtils.getFile("test-dbs","ws2-"+testid)); 
67

    
68
        Map<String, String> expected = TestUtils.getExpecteds("S04Row.txt");
69
        
70

    
71
        // ---------------------------------------------------------
72
        // Creamos el server y obtenemos el repositorio del server
73
        int r = manager.initRepository(explorerParams, null);
74
        assertEquals("srv-init status", 0, r);
75

    
76
        VCSGisRepository repolocal = manager.openRepository(explorerParams);
77
        TestUtils.h2sql_repository(repolocal);
78
        
79
        // ---------------------------------------------------------
80
        // Creamos un workspace y preparamos los datos en el para hacer un commit
81
        r = manager.initWorkspace(ws1file, repolocal, "Test checkout ws1", null);
82
        assertEquals("ws1-init status", 0, r);
83
        
84
        VCSGisWorkspace ws1 = manager.openWorkspace(ws1file);
85
        TestUtils.h2sql_workspace(ws1);
86
        
87
        FeatureStore sourceStore = TestUtils.openSourceStore2();
88
        
89
        r = ws1.add("test", sourceStore, "text");
90
        assertEquals("ws1-add status", 0, r);      
91

    
92
        r = ws1.commit(Timestamp.valueOf("2020-02-17 10:11:12.123"), testid, null);
93
        assertEquals("ws1.commit status", ERR_OK, r);
94

    
95
        DisposeUtils.disposeQuietly(sourceStore);
96

    
97
        FeatureStore store = ws1.getFeatureStore("test");
98
        VCSGisRepository reporemote = manager.openRepository(serverUrl);
99
        VCSGisServerController serverController = manager.createServerController(repolocal);
100
        VCSGisServerHandler serverHandler;
101
        InputStream is;
102
        InputStream os;
103
        String entityCode = "00000000000003abcdef0123456789";
104
        String relatedFeatureCode = "00000000000023abcdef0123456789";
105
        String localRevisionCodeForRowCreate = "00000000000015abcdef0123456789";
106
        String localRevisionCodeForRowUpdate = "00000000000025abcdef0123456789";
107
        String localRevisionCodeForRowDelete = "00000000000030abcdef0123456789";
108
        String localRevisionCodeAfterRowDelete = "00000000000035abcdef0123456789";
109

    
110
        assertEquals("initial EntityRevisionCode", 
111
                localRevisionCodeForRowCreate, 
112
                ws1.getWorkspaceEntityByName("test").getRepositoryRevisionCode()
113
        );
114
        
115
        // RowCreate test
116
        RowCreateRequestClient createRequest = (RowCreateRequestClient) reporemote.createRowCreateRequest(
117
                "test", 
118
                localRevisionCodeForRowCreate
119
        );
120
        EditableFeature f = store.createNewFeature();
121
        f.set("id",4);
122
        f.set("text","DDD");
123
        String createdata = f.toJson().toString();
124
        createRequest.setData(createdata);
125
        createRequest.setEfectiveDate(Timestamp.valueOf("2020-02-18 10:11:12.123"));
126
        createRequest.setComment("test row create (4,ddd)");
127
        
128
        String req_s = StringUtils.join(IOUtils.readLines(createRequest.getRequestAsInputStream()),"\n").trim();
129
        assertEquals("Row create LastErrorCode", ERR_OK, createRequest.getLastErrorCode());
130
        assertEquals("Row create request", expected.get("RowCreateRequest").trim(), req_s);
131
        
132
        serverHandler = (RowCreateHandler) serverController.createRowCreateHandler();
133
        
134
        is = new ByteArrayInputStream(req_s.getBytes());
135
        os = serverHandler.handle(is);
136
        
137
        String resp_s = StringUtils.join(IOUtils.readLines(os),"\n").trim();
138
        assertEquals("Row create response", expected.get("RowCreateResponse").trim(), resp_s);
139
        
140
        createRequest.consumeResponse(new ByteArrayInputStream(resp_s.getBytes()));
141
        assertEquals("Row create RelatedFeatureCode", relatedFeatureCode, createRequest.getRelatedFeatureCode());
142
        assertEquals("Row create EntityCode", entityCode, createRequest.getEntityCode());
143
        assertEquals("Row create EntityRevisionCode", localRevisionCodeForRowUpdate, createRequest.getEntityRevisionCode());
144
        
145
        // RowUpdate test
146
        RowUpdateRequestClient updateRequest = (RowUpdateRequestClient) reporemote.createRowUpdateRequest(
147
                "test",
148
                localRevisionCodeForRowUpdate
149
        );
150
        f.set("text", "DD2");
151
        f.set("VCSGISCODE", relatedFeatureCode);
152
        String updatedata = f.toJson().toString();
153
        updateRequest.setData(updatedata);
154
        createRequest.setEfectiveDate((Timestamp)null);
155
        updateRequest.setComment("test row update (4,dd2)");
156
        
157
        req_s = StringUtils.join(IOUtils.readLines(updateRequest.getRequestAsInputStream()),"\n").trim();
158
        assertEquals("Row update LastErrorCode", ERR_OK, updateRequest.getLastErrorCode());
159
        assertEquals("Row update request", expected.get("RowUpdateRequest").trim(), req_s);
160
        
161
        serverHandler = serverController.createRowUpdateHandler();
162
        
163
        is = new ByteArrayInputStream(req_s.getBytes());
164
        os = serverHandler.handle(is);
165
        
166
        resp_s = StringUtils.join(IOUtils.readLines(os),"\n").trim();
167
        assertEquals("Row update request", expected.get("RowUpdateResponse").trim(), resp_s);
168
        
169
        updateRequest.consumeResponse(new ByteArrayInputStream(resp_s.getBytes()));
170
        assertEquals("Row update EntityCode", entityCode, updateRequest.getEntityCode());
171
        assertEquals("Row update EntityRevisionCode", localRevisionCodeForRowDelete, updateRequest.getEntityRevisionCode());
172
        
173
        
174
        // RowDelete test
175
        RowDeleteRequestClient deleteRequest = (RowDeleteRequestClient) reporemote.createRowDeleteRequest(
176
                "test", 
177
                localRevisionCodeForRowDelete
178
        );
179
        deleteRequest.setRelatedFeatureCode(createRequest.getRelatedFeatureCode());
180
        deleteRequest.setComment("test row delete (4,dd2)");
181
        deleteRequest.setEfectiveDate(Timestamp.valueOf("2020-02-19 10:11:12.123"));
182
        
183
        req_s = StringUtils.join(IOUtils.readLines(deleteRequest.getRequestAsInputStream()),"\n").trim();
184
        assertEquals("Row delete request", expected.get("RowDeleteRequest").trim(), req_s);
185
        
186
        serverHandler = serverController.createRowDeleteHandler();
187
        
188
        is = new ByteArrayInputStream(req_s.getBytes());
189
        os = serverHandler.handle(is);
190
        
191
        resp_s = StringUtils.join(IOUtils.readLines(os),"\n").trim();
192
        assertEquals("Row delete request", expected.get("RowDeleteResponse").trim(), resp_s);
193
        
194
        deleteRequest.consumeResponse(new ByteArrayInputStream(resp_s.getBytes()));
195
        assertEquals("Row delete EntityCode", entityCode, deleteRequest.getEntityCode());
196
        assertEquals("Row delete EntityRevisionCode", localRevisionCodeAfterRowDelete, deleteRequest.getEntityRevisionCode());
197
        
198
        repolocal.dispose();
199
    }
200
}