com.google.enterprise.connector.db.diffing.DBHandleTest.java Source code

Java tutorial

Introduction

Here is the source code for com.google.enterprise.connector.db.diffing.DBHandleTest.java

Source

// Copyright 2011 Google Inc.
//
// 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.google.enterprise.connector.db.diffing;

import com.google.common.collect.ImmutableMap;
import com.google.enterprise.connector.spi.Document;
import com.google.enterprise.connector.spi.Property;
import com.google.enterprise.connector.spi.RepositoryException;
import com.google.enterprise.connector.spi.SpiConstants;
import com.google.enterprise.connector.spi.Value;
import com.google.enterprise.connector.spiimpl.DateValue;
import com.google.enterprise.connector.util.diffing.DocumentHandle;

import junit.framework.TestCase;

import org.json.JSONException;
import org.json.JSONObject;

import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

public class DBHandleTest extends TestCase {

    private String lastModified;
    private Map<String, String> properties;
    private JsonDocument jsonDocument;

    protected void setUp() throws Exception {
        long lastModifiedMillis = new Date().getTime();
        Calendar lastModifiedCalendar = Calendar.getInstance();
        lastModifiedCalendar.setTimeInMillis(lastModifiedMillis);
        lastModified = Value.calendarToIso8601(lastModifiedCalendar);

        properties = ImmutableMap.of(SpiConstants.PROPNAME_DOCID, "1", SpiConstants.PROPNAME_ISPUBLIC, "false",
                SpiConstants.PROPNAME_MIMETYPE, "text/plain", SpiConstants.PROPNAME_LASTMODIFIED, lastModified);

        JsonObjectUtil jsonObjectUtil = new JsonObjectUtil();
        for (Map.Entry<String, String> entry : properties.entrySet()) {
            jsonObjectUtil.setProperty(entry.getKey(), entry.getValue());
        }
        // Overwrites the string in jsonObjectUtil with a date value.
        jsonObjectUtil.setLastModifiedDate(SpiConstants.PROPNAME_LASTMODIFIED, new Timestamp(lastModifiedMillis));
        jsonDocument = new JsonDocument(jsonObjectUtil.getProperties(), jsonObjectUtil.getJsonObject());
    }

    public void testGetDocument() throws Exception {
        DocumentHandle handle = new DBHandle(jsonDocument);
        Document doc = handle.getDocument();
        assertNotNull(doc);
        assertEquals(properties.keySet(), doc.getPropertyNames());

        for (Map.Entry<String, String> entry : properties.entrySet()) {
            Property property = doc.findProperty(entry.getKey());
            assertNotNull(property);
            assertEquals(entry.getValue(), property.nextValue().toString());
        }
    }

    public void testGetDocumentId() {
        DBHandle handle = new DBHandle(jsonDocument);
        String expected = "1";
        assertEquals(expected, handle.getDocumentId());
    }

    /**
     * Tests that the JSON object handle string includes all of the
     * document properties.
     */
    public void testToString() throws JSONException {
        DocumentHandle handle = new DBHandle(jsonDocument);

        // TODO(jlacey): The serialization of the DBHandle produces
        // different results on Java 7 and Java 8 (which is not
        // unexpected). We want to compare the parsed strings as
        // JSONObjects, but JSONObject does not implement equals. Calling
        // toString on both JSONObjects happens to work on both versions
        // of Java. If this test fails, we should compare the wrapped
        // JSONObjects directly using getNames and get.
        String expected = "{\"google:ispublic\":\"false\",\"google:docid\":\"1\","
                + "\"google:mimetype\":\"text/plain\"," + "\"google:lastmodified\":\"" + lastModified + "\"}";
        assertEquals(new JSONObject(expected).toString(), new JSONObject(handle.toString()).toString());
    }

    /**
     * Tests that google:lastmodified is deserialized as a DateValue.
     * This test could go in DBSnapshotRepositoryTest, where the main
     * lifecycle tests are, or in JsonDocumentTest, since the date
     * handling is in JsonDocument at the moment, but we're
     * fundamentally testing the behavior of the document handle.
     */
    public void testDeserializedDate() throws RepositoryException {
        DocumentHandle handle = new DBHandle(jsonDocument);
        Document document = handle.getDocument();
        DocumentHandle deserialHandle = new DBHandle(handle.toString());
        Document deserialDocument = deserialHandle.getDocument();

        Value value = Value.getSingleValue(document, SpiConstants.PROPNAME_LASTMODIFIED);
        Value deserialValue = Value.getSingleValue(deserialDocument, SpiConstants.PROPNAME_LASTMODIFIED);
        assertEquals(lastModified, value.toString());
        assertEquals(value.toString(), deserialValue.toString());
        assertTrue(value.getClass().toString(), value instanceof DateValue);
        assertEquals(value.getClass(), deserialValue.getClass());
    }
}