blob: 91200d7262a39570045421412fe2398fd449773d [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.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Logger;
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.options.CreateDataObjectOptions;
import org.jclouds.snia.cdmi.v1.queryparams.DataObjectQueryParams;
import org.testng.annotations.Test;
import com.google.common.base.Charsets;
import com.google.common.io.CharStreams;
import com.google.common.io.Files;
/**
* @author Kenneth Nagin
*/
@Test(groups = "live", testName = "DataApiLiveTest")
public class DataApiLiveTest extends BaseCDMIApiLiveTest {
@Test
public void testCreateDataObjects() throws Exception {
String containerName = "MyContainer" + System.currentTimeMillis() + "/";
String dataObjectNameIn = "dataobject08121.txt";
File tmpFileIn = new File("temp.txt");
String value;
InputStream is;
File tmpFileOut;
File inFile;
Files.touch(tmpFileIn);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(bos);
byte[] bytes;
CreateDataObjectOptions pCreateDataObjectOptions;
DataObject dataObject;
Iterator<String> keys;
Map<String, String> dataObjectMetaDataOut;
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");
CreateContainerOptions pCreateContainerOptions = CreateContainerOptions.Builder
.metadata(pContainerMetaDataIn);
ContainerApi containerApi = cdmiContext.getApi()
.getContainerApi();
DataApi dataApi = cdmiContext.getApi().getDataApi();
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 value mimetype and metadata
value = "Hello CDMI data object with value mimetype and metadata";
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.value(value).mimetype("text/plain")
.metadata(pDataObjectMetaDataIn);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getMimetype(), "text/plain");
assertEquals(dataObject.getValueAsString(), value);
dataObjectMetaDataOut = dataObject.getUserMetadata();
assertNotNull(dataObjectMetaDataOut);
keys = pDataObjectMetaDataIn.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
assertEquals(dataObjectMetaDataOut.containsKey(key), true);
assertEquals(dataObjectMetaDataOut.get(key),
pDataObjectMetaDataIn.get(key));
}
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);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// verify that options order does not matter
value = "Hello CDMI World3";
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.metadata(pDataObjectMetaDataIn).mimetype("text/plain")
.value(value);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getMimetype(), "text/plain");
assertEquals(dataObject.getValueAsString(), value);
dataObjectMetaDataOut = dataObject.getUserMetadata();
assertNotNull(dataObjectMetaDataOut);
keys = pDataObjectMetaDataIn.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
assertEquals(dataObjectMetaDataOut.containsKey(key), true);
assertEquals(dataObjectMetaDataOut.get(key),
pDataObjectMetaDataIn.get(key));
}
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);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with empty metadata
value = "Hello CDMI World4";
pDataObjectMetaDataIn.clear();
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.value(value).mimetype("text/plain")
.metadata(pDataObjectMetaDataIn);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getMimetype(), "text/plain");
assertEquals(dataObject.getValueAsString(), value);
dataObjectMetaDataOut = dataObject.getUserMetadata();
assertNotNull(dataObjectMetaDataOut);
assertEquals(dataObjectMetaDataOut.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);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with null metadata
value = "Hello CDMI World5";
pCreateDataObjectOptions = CreateDataObjectOptions.Builder.value(
value).mimetype("text/plain");
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getMimetype(), "text/plain");
assertEquals(dataObject.getValueAsString(), value);
dataObjectMetaDataOut = dataObject.getUserMetadata();
assertNotNull(dataObjectMetaDataOut);
assertEquals(true, dataObjectMetaDataOut.isEmpty());
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);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with only value
value = "Hello CDMI World6";
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.value(value);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getValueAsString(), value);
dataObjectMetaDataOut = dataObject.getUserMetadata();
assertNotNull(dataObjectMetaDataOut);
assertEquals(dataObjectMetaDataOut.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);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with empty mimetype only
value = "";
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.mimetype(new String());
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
//assertEquals(dataObject.getMimetype(), "");
assertEquals(dataObject.getValueAsString(), "");
dataObjectMetaDataOut = dataObject.getUserMetadata();
assertNotNull(dataObjectMetaDataOut);
//assertEquals(dataObjectMetaDataOut.isEmpty(),true);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
// exercise create data object with no value
value = "";
pCreateDataObjectOptions = CreateDataObjectOptions.Builder.value();
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getValueAsString(), "");
dataObjectMetaDataOut = dataObject.getUserMetadata();
assertNotNull(dataObjectMetaDataOut);
assertEquals(dataObjectMetaDataOut.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);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with byte array
value = "Hello CDMI World 7";
out.writeUTF(value);
out.close();
bytes = bos.toByteArray();
// String.getBytes causes an exception CreateDataObjectOptions need to investigate byte arrays
//bytes = value.getBytes("UTF-8");
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.value(bytes);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
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(
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);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with an existing file
inFile = new File(System.getProperty("user.dir")
+ "/src/test/resources/container.json");
assertEquals(true, inFile.isFile());
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.value(inFile);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
tmpFileOut = dataObject.getValueAsFile(Files.createTempDir());
assertEquals(true, Files.equal(tmpFileOut, inFile));
tmpFileOut.delete();
assertEquals(
Integer.parseInt(dataObject.getSystemMetadata().get(
"cdmi_size")),
Files.toString(inFile, Charsets.UTF_8).length());
assertEquals(dataObject.getObjectName(), dataObjectNameIn);
assertEquals(dataObject.getObjectType(), "application/cdmi-object");
assertEquals(dataObject.getParentURI(), "/" + containerName);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), true);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with a temporary file that we create
// on the fly
// with default Charset
value = "Hello CDMI World 10";
Files.write(value, tmpFileIn, Charsets.UTF_8);
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.value(tmpFileIn);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
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(
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);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with a temporary file that we create
// on the fly
// specify charset UTF_8
Files.write(value, tmpFileIn, Charsets.UTF_8);
pCreateDataObjectOptions = CreateDataObjectOptions.Builder.value(
tmpFileIn, Charsets.UTF_8);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
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(
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);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with a temporary file that we create
// on the fly
// specify charset US_ASCII
Files.write(value, tmpFileIn, Charsets.US_ASCII);
pCreateDataObjectOptions = CreateDataObjectOptions.Builder.value(
tmpFileIn, Charsets.US_ASCII);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
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(
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);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with a temporary file with multiple
// lines
// with default Charset
Files.write("line1", tmpFileIn, Charsets.UTF_8);
Files.append("\nline2", tmpFileIn, Charsets.UTF_8);
Files.append("\nline3", tmpFileIn, Charsets.UTF_8);
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.value(tmpFileIn);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getValueAsString(), "line1\nline2\nline3");
tmpFileOut = dataObject.getValueAsFile(Files.createTempDir());
assertEquals(true, Files.equal(tmpFileOut, tmpFileIn));
tmpFileOut.delete();
assertEquals(
Integer.parseInt(dataObject.getSystemMetadata().get(
"cdmi_size")),
Files.toString(tmpFileIn, Charsets.UTF_8).length());
assertEquals(dataObject.getObjectName(), dataObjectNameIn);
assertEquals(dataObject.getObjectType(), "application/cdmi-object");
assertEquals(dataObject.getParentURI(), "/" + containerName);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), true);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with a temporary file with multiple
// lines
// with Charset UTF_8
Files.write("line1", tmpFileIn, Charsets.UTF_8);
Files.append("\nline2", tmpFileIn, Charsets.UTF_8);
Files.append("\nline3", tmpFileIn, Charsets.UTF_8);
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.value(new FileInputStream(tmpFileIn));
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getValueAsString(), "line1\nline2\nline3");
tmpFileOut = dataObject.getValueAsFile(Files.createTempDir());
assertEquals(true, Files.equal(tmpFileOut, tmpFileIn));
tmpFileOut.delete();
assertEquals(
Integer.parseInt(dataObject.getSystemMetadata().get(
"cdmi_size")),
Files.toString(tmpFileIn, Charsets.UTF_8).length());
assertEquals(dataObject.getObjectName(), dataObjectNameIn);
assertEquals(dataObject.getObjectType(), "application/cdmi-object");
assertEquals(dataObject.getParentURI(), "/" + containerName);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), true);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with a temporary file with multiple
// lines
// with Charset ISO_8859_1
Files.write("line1", tmpFileIn, Charsets.ISO_8859_1);
Files.append("\nline2", tmpFileIn, Charsets.ISO_8859_1);
Files.append("\nline3", tmpFileIn, Charsets.ISO_8859_1);
pCreateDataObjectOptions = CreateDataObjectOptions.Builder.value(
new FileInputStream(tmpFileIn), Charsets.ISO_8859_1);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getValueAsString(), "line1\nline2\nline3");
tmpFileOut = dataObject.getValueAsFile(Files.createTempDir());
assertEquals(true, Files.equal(tmpFileOut, tmpFileIn));
tmpFileOut.delete();
assertEquals(
Integer.parseInt(dataObject.getSystemMetadata().get(
"cdmi_size")),
Files.toString(tmpFileIn, Charsets.ISO_8859_1).length());
assertEquals(dataObject.getObjectName(), dataObjectNameIn);
assertEquals(dataObject.getObjectType(), "application/cdmi-object");
assertEquals(dataObject.getParentURI(), "/" + containerName);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), true);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
// exercise create data object with an inputstream
is = new ByteArrayInputStream(value.getBytes());
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.value(is);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
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(
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);
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
} finally {
tmpFileIn.delete();
containerApi.deleteContainer(containerName);
}
}
@Test
public void testGetDataObjects() throws Exception {
String containerName = "MyContainer" + System.currentTimeMillis() + "/";
String dataObjectNameIn = "dataobject08121.txt";
File tmpFileIn = new File("temp.txt");
String value;
Files.touch(tmpFileIn);
CreateDataObjectOptions pCreateDataObjectOptions;
DataObject dataObject;
Iterator<String> keys;
Map<String, String> dataObjectMetaDataOut;
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");
CreateContainerOptions pCreateContainerOptions = CreateContainerOptions.Builder
.metadata(pContainerMetaDataIn);
ContainerApi containerApi = cdmiContext.getApi()
.getContainerApi();
DataApi dataApi = cdmiContext.getApi().getDataApi();
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 value mimetype and metadata
value = "Hello CDMI data object with value mimetype and metadata";
pCreateDataObjectOptions = CreateDataObjectOptions.Builder
.value(value).mimetype("text/plain")
.metadata(pDataObjectMetaDataIn);
dataObject = dataApi.createDataObject(containerName,
dataObjectNameIn, pCreateDataObjectOptions);
assertNotNull(dataObject);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn);
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println("value: " + dataObject.getValueAsString());
assertEquals(dataObject.getMimetype(), "text/plain");
assertEquals(dataObject.getValueAsString(), value);
dataObjectMetaDataOut = dataObject.getUserMetadata();
assertNotNull(dataObjectMetaDataOut);
keys = pDataObjectMetaDataIn.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
assertEquals(dataObjectMetaDataOut.containsKey(key), true);
assertEquals(dataObjectMetaDataOut.get(key),
pDataObjectMetaDataIn.get(key));
}
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);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn,DataObjectQueryParams.Builder.field("parentURI"));
assertNotNull(dataObject);
System.out.println(dataObject);
assertEquals(dataObject.getParentURI(),container.getParentURI()+container.getObjectName());
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn,DataObjectQueryParams.Builder.field("parentURI").field("objectName"));
assertNotNull(dataObject);
System.out.println(dataObject);
assertEquals(dataObject.getParentURI(),container.getParentURI()+container.getObjectName());
assertEquals(dataObject.getObjectName(),dataObjectNameIn);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn,DataObjectQueryParams.Builder.field("parentURI").field("objectName").field("mimetype"));
assertNotNull(dataObject);
System.out.println(dataObject);
assertEquals(dataObject.getParentURI(),container.getParentURI()+container.getObjectName());
assertEquals(dataObject.getObjectName(),dataObjectNameIn);
assertEquals(dataObject.getMimetype(),"text/plain");
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn,DataObjectQueryParams.Builder.field("parentURI").field("objectName").field("mimetype").metadata());
assertNotNull(dataObject);
System.out.println(dataObject);
assertEquals(dataObject.getParentURI(),container.getParentURI()+container.getObjectName());
assertEquals(dataObject.getObjectName(),dataObjectNameIn);
assertEquals(dataObject.getMimetype(),"text/plain");
dataObjectMetaDataOut = dataObject.getUserMetadata();
assertNotNull(dataObjectMetaDataOut);
keys = pDataObjectMetaDataIn.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
assertEquals(dataObjectMetaDataOut.containsKey(key), true);
assertEquals(dataObjectMetaDataOut.get(key),
pDataObjectMetaDataIn.get(key));
}
assertEquals(
Integer.parseInt(dataObject.getSystemMetadata().get(
"cdmi_size")), value.length());
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn,DataObjectQueryParams.Builder.metadata("cdmi_size"));
assertNotNull(dataObject);
System.out.println(dataObject);
assertEquals(
Integer.parseInt(dataObject.getSystemMetadata().get(
"cdmi_size")), value.length());
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn,DataObjectQueryParams.Builder.field("mimetype").value());
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println(dataObject.getValueAsString());
assertEquals(dataObject.getMimetype(),"text/plain");
assertEquals(dataObject.getValueAsString(),value);
dataObject = dataApi.getDataObject(containerName,
dataObjectNameIn,DataObjectQueryParams.Builder.field("mimetype").value(0,3));
assertNotNull(dataObject);
System.out.println(dataObject);
System.out.println(dataObject.getValueAsString());
assertEquals(dataObject.getMimetype(),"text/plain");
//value is SGVsbA==. This needs investigating to determine if this
//is problem with CDMI server or the jcloud client or must understanding of spec
dataApi.deleteDataObject(containerName, dataObjectNameIn);
assertEquals(containerApi.getContainer(containerName)
.getChildren().contains(dataObjectNameIn), false);
} finally {
tmpFileIn.delete();
containerApi.deleteContainer(containerName);
}
}
}