package dk.kb.yggdrasil.json; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.PushbackInputStream; import java.util.Date; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import com.antiaction.common.json.JSONDecoder; import com.antiaction.common.json.JSONEncoder; import com.antiaction.common.json.JSONEncoding; import com.antiaction.common.json.JSONObjectMappings; import com.antiaction.common.json.JSONStructure; import com.antiaction.common.json.JSONText; import dk.kb.yggdrasil.json.JSONMessaging; import dk.kb.yggdrasil.json.preservation.Preservation; import dk.kb.yggdrasil.json.preservation.PreservationRequest; import dk.kb.yggdrasil.json.preservation.PreservationResponse; import dk.kb.yggdrasil.json.preservationimport.PreservationImportRequest; import dk.kb.yggdrasil.json.preservationimport.PreservationImportResponse; import dk.kb.yggdrasil.json.preservationimport.Response; import dk.kb.yggdrasil.json.preservationimport.Security; import dk.kb.yggdrasil.json.preservationimport.Warc; @RunWith(JUnit4.class) public class JSONMessagingTest { protected static JSONEncoding json_encoding = JSONEncoding.getJSONEncoding(); protected static JSONObjectMappings json_om = new JSONObjectMappings(); protected static JSONText json_text = new JSONText(); protected static JSONEncoder json_encoder = json_encoding.getJSONEncoder(JSONEncoding.E_UTF8); @BeforeClass public static void beforeClass() throws Exception { json_om.register(PreservationRequest.class); json_om.register(PreservationResponse.class); json_om.register(PreservationImportRequest.class); json_om.register(PreservationImportResponse.class); } @Test public void testJsonMessagingForPreservationRequest() throws Exception { PreservationRequest request = new PreservationRequest(); request.Preservation_profile = "simple"; request.UUID = "uuid"; request.Valhal_ID = "Valhal:1"; request.File_UUID = "fuuid"; request.Content_URI = "curi"; request.metadata = "Some metadata"; request.Model = "work"; ByteArrayOutputStream out = new ByteArrayOutputStream(); JSONStructure json_struct = json_om.getStructureMarshaller().toJSON(request); json_text.encodeJSONtext(json_struct, json_encoder, false, out); out.close(); byte[] requestBytes = out.toByteArray(); PushbackInputStream in = new PushbackInputStream(new ByteArrayInputStream(requestBytes), 4); request = JSONMessaging.getRequest(in, PreservationRequest.class); in.close(); Assert.assertNotNull(request); Assert.assertEquals("simple", request.Preservation_profile); Assert.assertEquals("uuid", request.UUID); Assert.assertEquals("Valhal:1", request.Valhal_ID); Assert.assertEquals("fuuid", request.File_UUID); Assert.assertEquals("curi", request.Content_URI); Assert.assertEquals("work", request.Model); Assert.assertNotNull(request.metadata); } @Test public void testJsonMessagingForPreservationResponse() throws Exception { PreservationResponse response = new PreservationResponse(); Preservation preservation = new Preservation(); response.preservation = preservation; response.id = "Valhal:1"; response.model = "work"; preservation.preservation_state = "state"; preservation.preservation_details = "hello"; preservation.warc_id = "WAHRC!"; byte[] responseBytes = JSONMessaging.getPreservationResponse(response); Assert.assertNotNull(responseBytes); PushbackInputStream in = new PushbackInputStream(new ByteArrayInputStream(responseBytes), 4); int encoding = JSONEncoding.encoding(in); Assert.assertEquals(JSONEncoding.E_UTF8, encoding); JSONDecoder json_decoder = json_encoding.getJSONDecoder(encoding); JSONStructure json_struct = json_text.decodeJSONtext(in, json_decoder); in.close(); response = json_om.getStructureUnmarshaller().toObject(json_struct, PreservationResponse.class); Assert.assertNotNull(response); Assert.assertNotNull(response.preservation); Assert.assertEquals("state", response.preservation.preservation_state); Assert.assertEquals("hello", response.preservation.preservation_details); Assert.assertEquals("WAHRC!", response.preservation.warc_id); Assert.assertEquals("Valhal:1", response.id); Assert.assertEquals("work", response.model); } @Test public void testJsonMessagingForPreservationImportRequest() throws Exception { Date date = new Date(); PreservationImportRequest request = new PreservationImportRequest(); request.preservation_profile = "simple"; request.security = new Security(); request.security.checksum = "damm:1"; request.security.token = "token"; request.security.token_timeout = date.toString(); request.type = "FILE"; request.url = "http://localhost:3000/view_file"; request.uuid = "uuid"; request.warc = new Warc(); request.warc.warc_file_id = "warc_file_id"; request.warc.warc_offset = "warc_offset"; request.warc.warc_record_id = "warc_record_id"; request.warc.warc_record_size = "warc_record_size"; ByteArrayOutputStream out = new ByteArrayOutputStream(); JSONStructure json_struct = json_om.getStructureMarshaller().toJSON(request); json_text.encodeJSONtext(json_struct, json_encoder, false, out); out.close(); byte[] requestBytes = out.toByteArray(); PushbackInputStream in = new PushbackInputStream(new ByteArrayInputStream(requestBytes), 4); request = JSONMessaging.getRequest(in, PreservationImportRequest.class); in.close(); Assert.assertNotNull(request); Assert.assertEquals("simple", request.preservation_profile); Assert.assertNotNull(request.security); Assert.assertEquals("damm:1", request.security.checksum); Assert.assertEquals("token", request.security.token); Assert.assertEquals(date.toString(), request.security.token_timeout); Assert.assertEquals("FILE", request.type); Assert.assertEquals("http://localhost:3000/view_file", request.url); Assert.assertEquals("uuid", request.uuid); Assert.assertNotNull(request.warc); Assert.assertEquals("warc_file_id", request.warc.warc_file_id); Assert.assertEquals("warc_offset", request.warc.warc_offset); Assert.assertEquals("warc_record_id", request.warc.warc_record_id); Assert.assertEquals("warc_record_size", request.warc.warc_record_size); } @Test public void testJsonMessagingForPreservationImportResponse() throws Exception { Date date = new Date(); PreservationImportResponse response = new PreservationImportResponse(); response.response = new Response(); response.response.date = date.toString(); response.response.detail = "details"; response.response.state = "STATE"; response.type = "FILE"; response.uuid = "uuid"; byte[] responseBytes = JSONMessaging.getPreservationImportResponse(response); Assert.assertNotNull(responseBytes); PushbackInputStream in = new PushbackInputStream(new ByteArrayInputStream(responseBytes), 4); int encoding = JSONEncoding.encoding(in); Assert.assertEquals(JSONEncoding.E_UTF8, encoding); JSONDecoder json_decoder = json_encoding.getJSONDecoder(encoding); JSONStructure json_struct = json_text.decodeJSONtext(in, json_decoder); in.close(); response = json_om.getStructureUnmarshaller().toObject(json_struct, PreservationImportResponse.class); Assert.assertNotNull(response); Assert.assertNotNull(response.response); Assert.assertEquals(date.toString(), response.response.date); Assert.assertEquals("details", response.response.detail); Assert.assertEquals("STATE", response.response.state); Assert.assertEquals("FILE", response.type); Assert.assertEquals("uuid", response.uuid); } }