/******************************************************************************* | |
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved. | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* Contributors: | |
* Oracle - initial API and implementation from Oracle TopLink | |
******************************************************************************/ | |
package org.eclipse.persistence.testing.tests.lob; | |
import org.eclipse.persistence.testing.tests.writing.ComplexUpdateTest; | |
import org.eclipse.persistence.testing.framework.TestProblemException; | |
import org.eclipse.persistence.sessions.UnitOfWork; | |
/** | |
* <p> | |
* <b>Purpose</b>: Define a test for updating CLOB/BLOB into the database. | |
* <p> | |
* <b>Responsibilities</b>: | |
* <ul> | |
* <li> Write an object (with CLOB/BLOB value) into the database ready for the update. | |
* <li> Query back the inserted object, and make some changes. | |
* <li> Verify the object modified matches the object that was written. | |
* </ul> | |
* | |
* @author King Wang (Aug. 2002) | |
* @since TopLink/Java 5.0 | |
*/ | |
public class LOBUpdateTest extends ComplexUpdateTest { | |
private int size; | |
Object originalObjectNotInDB; | |
public LOBUpdateTest(Object originalObjectNotInDB, int size) { | |
this(originalObjectNotInDB, size, false); | |
} | |
public LOBUpdateTest(Object originalObjectNotInDB, int size, boolean usesUnitOfWork) { | |
super(); | |
this.originalObjectNotInDB = originalObjectNotInDB; | |
this.usesUnitOfWork = usesUnitOfWork; | |
this.size = size; | |
setDescription("This case tests the BLOB/CLOB update with size less or bigger than 4k and checks if it was updated properly"); | |
} | |
protected void changeObject() { | |
//Bug#3128838 Test Byte[] support | |
Image image = (Image)workingCopy; | |
image.setPicture(ImageSimulator.initObjectByteBase(size)); | |
image.setScript(ImageSimulator.initStringBase(size / 100)); | |
image.setAudio(ImageSimulator.initByteBase(size * 2)); | |
image.setCommentary(ImageSimulator.initCharArrayBase(size * 2)); | |
} | |
public String getName() { | |
String strUpdated = "Updated " + size + ", " + 2 * size; | |
String strOriginal = "Original " + ((Image)originalObjectNotInDB).getPicture().length + ", " + ((Image)originalObjectNotInDB).getScript().length(); | |
String str = "LOBUpdateTest(" + strUpdated + "; " + strOriginal + ")"; | |
if (usesUnitOfWork) { | |
str = str + " usesUOW"; | |
} | |
return str; | |
} | |
protected void setup() { | |
// Create originalObject and insert it into db - it will be deleted in reset() | |
try { | |
originalObject = ((Image)originalObjectNotInDB).clone(); | |
} catch (CloneNotSupportedException ex) { | |
throw new TestProblemException("clone failed", ex); | |
} | |
UnitOfWork uow = getSession().acquireUnitOfWork(); | |
uow.registerObject(originalObject); | |
uow.commit(); | |
super.setup(); | |
} | |
public void reset() { | |
if (originalObject != null) { | |
super.reset(); | |
UnitOfWork uow = getSession().acquireUnitOfWork(); | |
uow.deleteObject(originalObject); | |
uow.commit(); | |
originalObject = null; | |
} | |
} | |
} |