blob: ce0801e0fe4e47f2654fe8f3cad3d90d2b56e1ae [file] [log] [blame]
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package test.rowset.webrowset;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.util.Arrays;
import javax.sql.rowset.WebRowSet;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertEqualsNoOrder;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import org.testng.annotations.Test;
import test.rowset.cachedrowset.CommonCachedRowSetTests;
public abstract class CommonWebRowSetTests extends CommonCachedRowSetTests {
protected final String XMLFILEPATH = System.getProperty("test.src", ".")
+ File.separatorChar + "xml" + File.separatorChar;
protected final String COFFEE_ROWS_XML = XMLFILEPATH + "COFFEE_ROWS.xml";
protected final String DELETED_COFFEE_ROWS_XML
= XMLFILEPATH + "DELETED_COFFEE_ROWS.xml";
protected final String MODFIED_DELETED_COFFEE_ROWS_XML
= XMLFILEPATH + "MODFIED_DELETED_COFFEE_ROWS.xml";
protected final String UPDATED_COFFEE_ROWS_XML
= XMLFILEPATH + "UPDATED_COFFEE_ROWS.xml";
protected final String INSERTED_COFFEE_ROWS_XML
= XMLFILEPATH + "INSERTED_COFFEE_ROWS.xml";
protected final String UPDATED_INSERTED_COFFEE_ROWS_XML
= XMLFILEPATH + "UPDATED_INSERTED_COFFEE_ROWS.xml";
/*
* Utility method to write a WebRowSet XML file via an OutputStream
*/
protected ByteArrayOutputStream writeWebRowSetWithOutputStream(WebRowSet rs) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
rs.writeXml(oos);
}
return baos;
}
/*
* Utility method to write a WebRowSet XML file via an OutputStream
* and populating the WebRowSet via a ResultSet
*/
protected ByteArrayOutputStream writeWebRowSetWithOutputStream(ResultSet rs) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
WebRowSet wrs = rsf.createWebRowSet();
wrs.writeXml(rs, oos);
}
return baos;
}
/*
* Utility method to popoulate a WebRowSet via a InputStream
*/
protected WebRowSet readWebRowSetWithOInputStream(ByteArrayOutputStream baos) throws Exception {
WebRowSet wrs1 = rsf.createWebRowSet();
try (ObjectInputStream ois
= new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()))) {
wrs1.readXml(ois);
}
return wrs1;
}
/*
* Utility method to write a WebRowSet XML file via an Writer
*/
protected ByteArrayOutputStream writeWebRowSetWithOutputStreamWithWriter(WebRowSet rs) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(baos);
rs.writeXml(osw);
return baos;
}
/*
* Utility method to write a WebRowSet XML file via an Writer and populating
* the WebRowSet via a ResultSet
*/
protected ByteArrayOutputStream writeWebRowSetWithOutputStreamWithWriter(ResultSet rs) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(baos);
WebRowSet wrs = rsf.createWebRowSet();
wrs.writeXml(rs, osw);
return baos;
}
/*
* Utility method to popoulate a WebRowSet via a Readar
*/
protected WebRowSet readWebRowSetWithOInputStreamWithReader(ByteArrayOutputStream baos) throws Exception {
WebRowSet wrs1 = rsf.createWebRowSet();
InputStreamReader isr = new InputStreamReader(new ByteArrayInputStream(baos.toByteArray()));
wrs1.readXml(isr);
return wrs1;
}
/*
* Validate the expected Rows are contained within the RowSet
*/
@Test(dataProvider = "rowsetUsingCoffees")
public void WebRowSetTest0000(WebRowSet wrs) throws Exception {
assertEquals(getPrimaryKeys(wrs), COFFEES_PRIMARY_KEYS);
assertEquals(wrs.size(), COFFEES_ROWS);
wrs.close();
}
/*
* Validate the expected Rows are contained within the RowSet
* populated by readXML(Reader)
*/
@Test(dataProvider = "rowSetType")
public void WebRowSetTest0001(WebRowSet wrs1) throws Exception {
try (FileReader fr = new FileReader(COFFEE_ROWS_XML)) {
wrs1.readXml(fr);
}
assertEquals(getPrimaryKeys(wrs1), COFFEES_PRIMARY_KEYS);
assertEquals(wrs1.size(), COFFEES_ROWS);
wrs1.close();
}
/*
* Validate the expected Rows are contained within the RowSet
* populated by readXML(InputStream)
*/
@Test(dataProvider = "rowSetType")
public void WebRowSetTest0002(WebRowSet wrs1) throws Exception {
try (FileInputStream fis = new FileInputStream(COFFEE_ROWS_XML)) {
wrs1.readXml(fis);
}
assertEquals(getPrimaryKeys(wrs1), COFFEES_PRIMARY_KEYS);
assertEquals(wrs1.size(), COFFEES_ROWS);
wrs1.close();
}
/*
* Write a WebRowSet via writeXML(OutputStream), read it
* back via readXML(InputStream) and validate the primary keys
* are the same
*/
@Test(dataProvider = "rowsetUsingCoffees")
public void WebRowSetTest0003(WebRowSet wrs) throws Exception {
ByteArrayOutputStream baos = writeWebRowSetWithOutputStream(wrs);
try (WebRowSet wrs1 = readWebRowSetWithOInputStream(baos)) {
assertEquals(getPrimaryKeys(wrs1), COFFEES_PRIMARY_KEYS);
assertEquals(wrs1.size(), COFFEES_ROWS);
}
}
/*
* Write a ResultSet via writeXML(OutputStream), read it
* back via readXML(InputStream) and validate the primary keys
* are the same
*/
@Test(dataProvider = "rowsetUsingCoffees")
public void WebRowSetTest0004(WebRowSet wrs) throws Exception {
ResultSet rs = wrs;
rs.beforeFirst();
ByteArrayOutputStream baos = writeWebRowSetWithOutputStream(rs);
try (WebRowSet wrs1 = readWebRowSetWithOInputStream(baos)) {
assertEquals(getPrimaryKeys(wrs1), COFFEES_PRIMARY_KEYS);
assertEquals(wrs1.size(), COFFEES_ROWS);
}
}
/*
* Write a WebRowSet via writeXML(Writer), read it
* back via readXML(Reader) and validate the primary keys
* are the same
*/
@Test(dataProvider = "rowsetUsingCoffees")
public void WebRowSetTest0005(WebRowSet wrs) throws Exception {
ByteArrayOutputStream baos = writeWebRowSetWithOutputStreamWithWriter(wrs);
try (WebRowSet wrs1 = readWebRowSetWithOInputStreamWithReader(baos)) {
assertEquals(getPrimaryKeys(wrs1), COFFEES_PRIMARY_KEYS);
assertEquals(wrs1.size(), COFFEES_ROWS);
}
}
/*
* Write a WebRowSet via writeXML(Writer), read it
* back via readXML(Reader) and validate the primary keys
* are the same
*/
@Test(dataProvider = "rowsetUsingCoffees")
public void WebRowSetTest0006(WebRowSet wrs) throws Exception {
ResultSet rs = wrs;
rs.beforeFirst();
ByteArrayOutputStream baos = writeWebRowSetWithOutputStreamWithWriter(rs);
try (WebRowSet wrs1 = readWebRowSetWithOInputStreamWithReader(baos)) {
assertEquals(getPrimaryKeys(wrs1), COFFEES_PRIMARY_KEYS);
assertEquals(wrs1.size(), COFFEES_ROWS);
}
}
/*
* Validate the expected Rows are contained within the RowSet
* after deleting the specified rows
*/
@Test(dataProvider = "rowsetUsingCoffees", enabled = false)
public void WebRowSetTest0007(WebRowSet wrs) throws Exception {
assertEquals(getPrimaryKeys(wrs), COFFEES_PRIMARY_KEYS);
int[] rowsToDelete = {2, 4};
assertEquals(getPrimaryKeys(wrs), COFFEES_PRIMARY_KEYS);
for (int row : rowsToDelete) {
assertTrue(deleteRowByPrimaryKey(wrs, row, 1));
}
FileInputStream fis = new FileInputStream(MODFIED_DELETED_COFFEE_ROWS_XML);
try (WebRowSet wrs1 = rsf.createWebRowSet()) {
wrs1.readXml(fis);
// With setShowDeleted(false) which is the default,
// the deleted row should not be visible
for (int row : rowsToDelete) {
assertTrue(findRowByPrimaryKey(wrs1, row, 1));
}
assertTrue(wrs.size() == COFFEES_ROWS);
// With setShowDeleted(true), the deleted row should be visible
for (int row : rowsToDelete) {
assertTrue(findRowByPrimaryKey(wrs, row, 1));
}
}
}
/*
* Validate the expected Rows are contained within the RowSet
* that was populated by reading an xml file with all rows
* marked as a currentRow
*/
@Test(dataProvider = "rowSetType")
public void WebRowSetTest0008(WebRowSet wrs1) throws Exception {
FileInputStream fis = new FileInputStream(COFFEE_ROWS_XML);
wrs1.readXml(fis);
assertTrue(wrs1.size() == COFFEES_ROWS);
assertEquals(getPrimaryKeys(wrs1), COFFEES_PRIMARY_KEYS);
// Validate that the rows are not marked as deleted, inserted or updated
wrs1.beforeFirst();
while (wrs1.next()) {
assertFalse(wrs1.rowDeleted());
assertFalse(wrs1.rowInserted());
assertFalse(wrs1.rowUpdated());
}
wrs1.close();
}
/*
* Read an XML file to populate a WebRowSet and validate that the rows
* that are marked as deleted are marked as such in the WebRowSet
* Also validate that they are or are not visible based on the
* setShowDeleted value
*/
@Test(dataProvider = "rowSetType")
public void WebRowSetTest0009(WebRowSet wrs1) throws Exception {
int[] rowsToDelete = {2, 4};
Object[] expectedRows = {1, 3, 5};
FileInputStream fis = new FileInputStream(DELETED_COFFEE_ROWS_XML);
wrs1.readXml(fis);
assertTrue(wrs1.size() == COFFEES_ROWS);
assertEquals(getPrimaryKeys(wrs1), expectedRows);
// With setShowDeleted(false) which is the default,
// the deleted row should not be visible
for (int row : rowsToDelete) {
assertFalse(findRowByPrimaryKey(wrs1, row, 1));
}
// With setShowDeleted(true), the deleted row should be visible
wrs1.setShowDeleted(true);
for (int row : rowsToDelete) {
assertTrue(findRowByPrimaryKey(wrs1, row, 1));
}
assertEquals(getPrimaryKeys(wrs1), COFFEES_PRIMARY_KEYS);
wrs1.close();
}
/*
* Validate that the correct row in the WebRowSet that had been created
* from an xml file is marked as updated and contains the correct values
*/
@Test(dataProvider = "rowSetType")
public void WebRowSetTest0010(WebRowSet wrs1) throws Exception {
FileInputStream fis = new FileInputStream(UPDATED_COFFEE_ROWS_XML);
wrs1.readXml(fis);
assertTrue(wrs1.size() == COFFEES_ROWS);
assertEquals(getPrimaryKeys(wrs1), COFFEES_PRIMARY_KEYS);
wrs1.beforeFirst();
while (wrs1.next()) {
if (wrs1.getInt(1) == 3) {
assertTrue(wrs1.rowUpdated());
assertTrue(wrs1.getInt(5) == 21 && wrs1.getInt(6) == 69);
assertFalse(wrs1.rowDeleted());
assertFalse(wrs1.rowInserted());
} else {
assertFalse(wrs1.rowUpdated());
assertFalse(wrs1.rowDeleted());
assertFalse(wrs1.rowInserted());
}
}
wrs1.close();
}
/*
* Validate the correct row is marked as inserted in a WebRowSet
* that is read from an xml file
*/
@Test(dataProvider = "rowSetType")
public void WebRowSetTest0011(WebRowSet wrs1) throws Exception {
int expectedSize = COFFEES_ROWS + 2;
int addedRowPK = 15;
int addedRowPK2 = 20;
Object[] expected = Arrays.copyOf(COFFEES_PRIMARY_KEYS, expectedSize);
expected[expectedSize - 2] = addedRowPK;
expected[expectedSize - 1] = addedRowPK2;
FileInputStream fis = new FileInputStream(INSERTED_COFFEE_ROWS_XML);
wrs1.readXml(fis);
assertTrue(wrs1.size() == expectedSize);
assertEqualsNoOrder(getPrimaryKeys(wrs1), expected);
wrs1.beforeFirst();
while (wrs1.next()) {
if (wrs1.getInt(1) == 15 || wrs1.getInt(1) == 20) {
assertTrue(wrs1.rowInserted());
assertFalse(wrs1.rowDeleted());
assertFalse(wrs1.rowUpdated());
} else {
assertFalse(wrs1.rowInserted());
assertFalse(wrs1.rowDeleted());
assertFalse(wrs1.rowUpdated());
}
}
wrs1.close();
}
/*
* Read an xml file which contains a row that was inserted and updated
*/
@Test(dataProvider = "rowSetType")
public void WebRowSetTest0012(WebRowSet wrs1) throws Exception {
int expectedSize = COFFEES_ROWS + 1;
int addedRowPK = 100;
Object[] expected = Arrays.copyOf(COFFEES_PRIMARY_KEYS, expectedSize);
expected[expectedSize - 1] = addedRowPK;
FileInputStream fis = new FileInputStream(UPDATED_INSERTED_COFFEE_ROWS_XML);
wrs1.readXml(fis);
assertTrue(wrs1.size() == expectedSize);
assertEquals(getPrimaryKeys(wrs1), expected);
wrs1.beforeFirst();
while (wrs1.next()) {
if (wrs1.getInt(1) == addedRowPK) {
// Row that was inserted and updated
assertTrue(wrs1.rowUpdated());
assertTrue(
wrs1.getBigDecimal(4).equals(BigDecimal.valueOf(12.99))
&& wrs1.getInt(6) == 125);
assertFalse(wrs1.rowDeleted());
assertTrue(wrs1.rowInserted());
} else {
// Remaining rows should only be inserted
assertFalse(wrs1.rowUpdated());
assertFalse(wrs1.rowDeleted());
assertTrue(wrs1.rowInserted());
}
}
wrs1.close();
}
}