blob: 649b32c1fd8a0d88491bfbcd5d631a6a207a45dd [file] [log] [blame]
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you 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 org.jclouds.snia.cdmi.v1.features;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Logger;
import org.jclouds.io.Payload;
import org.jclouds.io.payloads.BaseMutableContentMetadata;
import org.jclouds.io.payloads.ByteArrayPayload;
import org.jclouds.io.payloads.FilePayload;
import org.jclouds.io.payloads.InputStreamPayload;
import org.jclouds.io.payloads.StringPayload;
import org.jclouds.snia.cdmi.v1.domain.Container;
import org.jclouds.snia.cdmi.v1.domain.DataObject;
import org.jclouds.snia.cdmi.v1.internal.BaseCDMIApiLiveTest;
import org.jclouds.snia.cdmi.v1.options.CreateContainerOptions;
import org.jclouds.snia.cdmi.v1.queryparams.DataObjectQueryParams;
import org.testng.annotations.Test;
import com.google.common.base.Charsets;
import com.google.common.io.ByteStreams;
import com.google.common.io.CharStreams;
import com.google.common.io.Files;
import com.google.common.net.MediaType;
/**
* @author Kenneth Nagin
*/
@Test(groups = "live", testName = "DataNonCDMIContentTypeApiLiveTest")
public class DataNonCDMIContentTypeApiLiveTest extends BaseCDMIApiLiveTest {
@Test
public void testCreateDataObjectsNonCDMI() throws Exception {
String containerName = "MyContainer" + System.currentTimeMillis() + "/";
String dataObjectNameIn = "dataobject.txt";
File tmpFileIn = new File("temp.txt");
String value;
InputStream is;
File tmpFileOut;
File inFile;
Files.touch(tmpFileIn);
byte[] bytes;
DataObject dataObject;
Map<String, String> pContainerMetaDataIn = new HashMap<String, String>();
Map<String, String> pDataObjectMetaDataIn = new LinkedHashMap<String, String>();
pDataObjectMetaDataIn.put("dataObjectkey1", "value1");
pDataObjectMetaDataIn.put("dataObjectkey2", "value2");
pDataObjectMetaDataIn.put("dataObjectkey3", "value3");
Payload payloadIn;
Payload payloadOut;
FileOutputStream fos;
CreateContainerOptions pCreateContainerOptions = CreateContainerOptions.Builder
.metadata(pContainerMetaDataIn);
ContainerApi containerApi = cdmiContext.getApi()
.getContainerApi();
DataApi dataApi = cdmiContext.getApi().getDataApi();
DataNonCDMIContentTypeApi dataNonCDMIContentTypeApi = cdmiContext.getApi().getDataNonCDMIContentTypeApi();
Logger.getAnonymousLogger().info("createContainer: " + containerName);
Container container = containerApi.createContainer(containerName,
pCreateContainerOptions);
try {
assertNotNull(container);
System.out.println(container);
container = containerApi.getContainer(containerName);
assertNotNull(container);
assertNotNull(container.getChildren());
assertEquals(container.getChildren().isEmpty(), true);
// exercise create data object with none cdmi put with payload string.
value = "Hello CDMI World non-cdmi String";
dataNonCDMIContentTypeApi.createDataObject(containerName, dataObjectNameIn,
value);
payloadOut = dataNonCDMIContentTypeApi.getDataObjectValue(containerName, dataObjectNameIn);
assertNotNull(payloadOut);
assertEquals(CharStreams.toString(new InputStreamReader(payloadOut.getInput(), "UTF-8")),value);
payloadIn = new StringPayload(value);
payloadIn.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(payloadIn.getContentMetadata().toBuilder()
.contentType(MediaType.PLAIN_TEXT_UTF_8.toString())
.build()));
dataNonCDMIContentTypeApi.createDataObject(containerName, dataObjectNameIn,
payloadIn);
payloadOut = dataNonCDMIContentTypeApi.getDataObjectValue(containerName, dataObjectNameIn);
assertNotNull(payloadOut);
assertEquals(CharStreams.toString(new InputStreamReader(payloadOut.getInput(), "UTF-8")),value);
dataObject = dataNonCDMIContentTypeApi.getDataObject(containerName, dataObjectNameIn,
DataObjectQueryParams.Builder.field("parentURI"));
assertNotNull(dataObject);
System.out.println(dataObject);
assertEquals(dataObject.getParentURI(), "/" + containerName);
dataObject = dataNonCDMIContentTypeApi.getDataObject(containerName, dataObjectNameIn,
DataObjectQueryParams.Builder.metadata()
.field("parentURI")
.field("objectName")
.field("objectType")
.field("mimetype"));
assertEquals(
Integer.parseInt(dataObject.getSystemMetadata().get(
"cdmi_size")), value.length());
assertEquals(dataObject.getObjectName(), dataObjectNameIn);
assertEquals(dataObject.getObjectType(), "application/cdmi-object");
assertEquals(dataObject.getParentURI(), "/" + containerName);
assertEquals(dataObject.getMimetype(),MediaType.PLAIN_TEXT_UTF_8.toString());
dataNonCDMIContentTypeApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with none cdmi put with payload byte array.
value = "Hello CDMI World non-cdmi byte array";
bytes = value.getBytes("UTF-8");
payloadIn = new ByteArrayPayload(bytes);
payloadIn.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(payloadIn.getContentMetadata().toBuilder()
.contentType(MediaType.PLAIN_TEXT_UTF_8.toString())
.build()));
dataNonCDMIContentTypeApi.createDataObject(containerName, dataObjectNameIn,
payloadIn);
System.out.println(containerApi.getContainer(containerName));
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getValueAsString(), value);
assertEquals(new String(dataObject.getValueAsByteArray()), value);
assertEquals(dataObject.getUserMetadata().isEmpty(), true);
assertEquals(
Integer.parseInt(dataObject.getSystemMetadata().get(
"cdmi_size")), value.length());
assertEquals(dataObject.getObjectName(), dataObjectNameIn);
assertEquals(dataObject.getObjectType(), "application/cdmi-object");
assertEquals(dataObject.getParentURI(), "/" + containerName);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), true);
payloadOut = dataNonCDMIContentTypeApi.getDataObjectValue(containerName, dataObjectNameIn);
assertNotNull(payloadOut);
assertEquals(CharStreams.toString(new InputStreamReader(payloadOut.getInput(), "UTF-8")),value);
dataNonCDMIContentTypeApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with none cdmi put with payload file.
value = "Hello CDMI World non-cdmi File";
Files.write(value, tmpFileIn, Charsets.UTF_8);
payloadIn = new FilePayload(tmpFileIn);
payloadIn.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(payloadIn.getContentMetadata().toBuilder()
.contentType(MediaType.PLAIN_TEXT_UTF_8.toString())
.build()));
dataNonCDMIContentTypeApi.createDataObject(containerName, dataObjectNameIn,
payloadIn);
System.out.println(containerApi.getContainer(containerName));
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getValueAsString(), value);
tmpFileOut = dataObject.getValueAsFile(Files.createTempDir());
assertEquals(true, Files.equal(tmpFileOut, tmpFileIn));
tmpFileOut.delete();
assertEquals(dataObject.getUserMetadata().isEmpty(), true);
System.out.println("My Metadata: "+dataObject.getUserMetadata());
assertEquals(
Integer.parseInt(dataObject.getSystemMetadata().get(
"cdmi_size")), value.length());
assertEquals(dataObject.getObjectName(), dataObjectNameIn);
assertEquals(dataObject.getObjectType(), "application/cdmi-object");
assertEquals(dataObject.getParentURI(), "/" + containerName);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), true);
payloadOut = dataNonCDMIContentTypeApi.getDataObjectValue(containerName, dataObjectNameIn);
assertNotNull(payloadOut);
//assertEquals(CharStreams.toString(new InputStreamReader(payloadOut.getInput(), "UTF-8")),value);
//byte[] _bytes = ByteStreams.toByteArray(payloadOut.getInput());
tmpFileOut = new File(Files.createTempDir(),"temp.txt");
fos = new FileOutputStream(tmpFileOut);
ByteStreams.copy(payloadOut.getInput(), fos);
fos.flush();
fos.close();
assertEquals(Files.equal(tmpFileOut, tmpFileIn),true);
tmpFileOut.delete();
dataNonCDMIContentTypeApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with none cdmi put with text file payload file.
inFile = new File(System.getProperty("user.dir")
+ "/src/test/resources/container.json");
assertEquals(true, inFile.isFile());
payloadIn = new FilePayload(inFile);
payloadIn.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(payloadIn.getContentMetadata().toBuilder()
.contentType(MediaType.JSON_UTF_8.toString())
.build()));
dataNonCDMIContentTypeApi.createDataObject(containerName, inFile.getName(),
payloadIn);
System.out.println(containerApi.getContainer(containerName));
dataObject = dataApi.getDataObject(containerName,
inFile.getName());
assertNotNull(dataObject);
System.out.println(dataObject);
//System.out.println("value: " + dataObject.getValueAsString());
//assertEquals(dataObject.getValueAsString(), value);
tmpFileOut = dataObject.getValueAsFile(Files.createTempDir());
assertEquals(true, Files.equal(tmpFileOut, inFile));
tmpFileOut.delete();
assertEquals(dataObject.getUserMetadata().isEmpty(), true);
//System.out.println("My Metadata: "+dataObject.getUserMetadata());
assertEquals(
Integer.parseInt(dataObject.getSystemMetadata().get(
"cdmi_size")), inFile.length());
assertEquals(dataObject.getObjectName(), inFile.getName());
assertEquals(dataObject.getObjectType(), "application/cdmi-object");
assertEquals(dataObject.getParentURI(), "/" + containerName);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(inFile.getName()), true);
dataApi.deleteDataObject(containerName, inFile.getName());
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with none cdmi put with text file payload file.
//inFile = new File(System.getProperty("user.dir")
// + "/src/test/resources/Jellyfish.jpg"); // takes too long when working from home
inFile = new File(System.getProperty("user.dir")
+ "/src/test/resources/yellow-flowers.jpg");
assertEquals(true, inFile.isFile());
payloadIn = new FilePayload(inFile);
payloadIn.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(payloadIn.getContentMetadata().toBuilder()
.contentType(MediaType.JPEG.toString())
.build()));
dataNonCDMIContentTypeApi.createDataObject(containerName, inFile.getName(),
payloadIn);
System.out.println(containerApi.getContainer(containerName));
//note dataApi.getDataObject when the data object is not a string
payloadOut = dataNonCDMIContentTypeApi.getDataObjectValue(containerName, inFile.getName());
assertNotNull(payloadOut);
tmpFileOut = new File(Files.createTempDir(),"temp.jpg");
fos = new FileOutputStream(tmpFileOut);
ByteStreams.copy(payloadOut.getInput(), fos);
fos.flush();
fos.close();
assertEquals(Files.equal(tmpFileOut, inFile),true);
tmpFileOut.delete();
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(inFile.getName()), true);
dataApi.deleteDataObject(containerName, inFile.getName());
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(inFile.getName()), false);
// exercise create data object with none cdmi put with payload inputStream riginating from string.
value = "Hello CDMI World non-cdmi inputStream originating from string";
is = new ByteArrayInputStream(value.getBytes());
payloadIn = new InputStreamPayload(is);
payloadIn.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(payloadIn.getContentMetadata().toBuilder()
.contentType(MediaType.PLAIN_TEXT_UTF_8.toString())
.contentLength(new Long(value.length()))
.build()));
dataNonCDMIContentTypeApi.createDataObject(containerName, dataObjectNameIn,
payloadIn);
System.out.println(containerApi.getContainer(containerName));
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getValueAsString(), value);
assertNotNull(dataObject.getValueAsInputSupplier());
assertEquals(CharStreams.toString(CharStreams.newReaderSupplier(dataObject
.getValueAsInputSupplier(Charsets.UTF_8),Charsets.UTF_8)), value);
assertEquals(dataObject.getUserMetadata().isEmpty(), true);
System.out.println("My Metadata: "+dataObject.getUserMetadata());
assertEquals(
Integer.parseInt(dataObject.getSystemMetadata().get(
"cdmi_size")), value.length());
assertEquals(dataObject.getObjectName(), dataObjectNameIn);
assertEquals(dataObject.getObjectType(), "application/cdmi-object");
assertEquals(dataObject.getParentURI(), "/" + containerName);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), true);
dataNonCDMIContentTypeApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with none cdmi put with payload inputStream originating from jpeg file.
inFile = new File(System.getProperty("user.dir")
+ "/src/test/resources/yellow-flowers.jpg");
assertEquals(true, inFile.isFile());
FileInputStream fileInputStream = new FileInputStream(inFile);
payloadIn = new InputStreamPayload(fileInputStream);
payloadIn.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(payloadIn.getContentMetadata().toBuilder()
.contentType(MediaType.JPEG.toString())
.contentLength(new Long(inFile.length()))
.build()));
dataNonCDMIContentTypeApi.createDataObject(containerName, inFile.getName(),
payloadIn);
System.out.println(containerApi.getContainer(containerName));
payloadOut = dataNonCDMIContentTypeApi.getDataObjectValue(containerName, inFile.getName());
assertNotNull(payloadOut);
tmpFileOut = new File(Files.createTempDir(),"temp.jpg");
fos = new FileOutputStream(tmpFileOut);
ByteStreams.copy(payloadOut.getInput(), fos);
fos.flush();
fos.close();
assertEquals(Files.equal(tmpFileOut, inFile),true);
tmpFileOut.delete();
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(inFile.getName()), true);
dataApi.deleteDataObject(containerName, inFile.getName());
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(inFile.getName()), false);
// exercise get with none cdmi get range.
value = "Hello CDMI World non-cdmi String";
payloadIn = new StringPayload(value);
payloadIn.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(payloadIn.getContentMetadata().toBuilder()
.contentType(MediaType.PLAIN_TEXT_UTF_8.toString())
.build()));
dataNonCDMIContentTypeApi.createDataObject(containerName, dataObjectNameIn,
payloadIn);
payloadOut = dataNonCDMIContentTypeApi.getDataObjectValue(containerName, dataObjectNameIn, "bytes=0-10");
assertNotNull(payloadOut);
assertEquals(CharStreams.toString(new InputStreamReader(payloadOut.getInput(), "UTF-8")),value.substring(0, 11));
assertEquals(payloadOut.getContentMetadata().getContentLength(),new Long(11));
payloadOut = dataNonCDMIContentTypeApi.getDataObjectValue(containerName, dataObjectNameIn, "bytes=11-20");
assertNotNull(payloadOut);
assertEquals(CharStreams.toString(new InputStreamReader(payloadOut.getInput(), "UTF-8")),value.substring(11, 21));
assertEquals(payloadOut.getContentMetadata().getContentLength(),new Long(10));
dataNonCDMIContentTypeApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with none cdmi partial.
// server does not actually support cdmi partial but
// trace allows me to see that request was constructed properly
value = "Hello CDMI World non-cdmi String";
payloadIn = new StringPayload(value);
payloadIn.setContentMetadata(BaseMutableContentMetadata.fromContentMetadata(payloadIn.getContentMetadata().toBuilder()
.contentType(MediaType.PLAIN_TEXT_UTF_8.toString())
.build()));
dataNonCDMIContentTypeApi.createDataObjectPartial(containerName, dataObjectNameIn,
payloadIn);
payloadOut = dataNonCDMIContentTypeApi.getDataObjectValue(containerName, dataObjectNameIn);
assertNotNull(payloadOut);
System.out.println("payload "+payloadOut);
dataNonCDMIContentTypeApi.createDataObjectPartial(containerName, dataObjectNameIn,
payloadIn);
payloadOut = dataNonCDMIContentTypeApi.getDataObjectValue(containerName, dataObjectNameIn);
assertNotNull(payloadOut);
System.out.println("payload "+payloadOut);
dataNonCDMIContentTypeApi.createDataObject(containerName, dataObjectNameIn,
payloadIn);
payloadOut = dataNonCDMIContentTypeApi.getDataObjectValue(containerName, dataObjectNameIn);
assertNotNull(payloadOut);
System.out.println("payload "+payloadOut);
} finally {
tmpFileIn.delete();
containerApi.deleteContainer(containerName);
}
}
}