/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.cmp2.readonly;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.HashSet;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import junit.framework.Test;
import org.jboss.test.JBossTestCase;
import org.jboss.test.util.ejb.EJBTestCase;
public class ReadonlyUnitTestCase extends EJBTestCase {
static org.jboss.logging.Logger log =
org.jboss.logging.Logger.getLogger(ReadonlyUnitTestCase.class);
public static Test suite() throws Exception {
return JBossTestCase.getDeploySetup(
ReadonlyUnitTestCase.class, "cmp2-readonly.jar");
}
public ReadonlyUnitTestCase(String name) {
super(name);
}
private PublisherHome getPublisherHome() {
try {
InitialContext jndiContext = new InitialContext();
return (PublisherHome) jndiContext.lookup("cmp2/readonly/Publisher");
} catch(Exception e) {
log.debug("failed", e);
fail("Exception in getPublisherHome: " + e.getMessage());
}
return null;
}
private BookHome getBookHome() {
try {
InitialContext jndiContext = new InitialContext();
return (BookHome) jndiContext.lookup("cmp2/readonly/Book");
} catch(Exception e) {
log.debug("failed", e);
fail("Exception in getBookHome: " + e.getMessage());
}
return null;
}
private AuthorHome getAuthorHome() {
try {
InitialContext jndiContext = new InitialContext();
return (AuthorHome) jndiContext.lookup("cmp2/readonly/Author");
} catch(Exception e) {
log.debug("failed", e);
fail("Exception in getAuthorHome: " + e.getMessage());
}
return null;
}
private Connection getConnection() {
try {
InitialContext jndiContext = new InitialContext();
DataSource ds = (DataSource) jndiContext.lookup("java:/DefaultDS");
return ds.getConnection();
} catch(Exception e) {
log.debug("failed", e);
fail("Exception in getConnection: " + e.getMessage());
}
return null;
}
private Publisher oreilly;
private Publisher sams;
private Book ejb;
private Book jms;
private Book jmx;
private Book jboss;
private Author dain;
protected void setUp() throws Exception {
PublisherHome publisherHome = getPublisherHome();
BookHome bookHome = getBookHome();
AuthorHome authorHome = getAuthorHome();
oreilly = publisherHome.findByName("O'Reilly & Associates");
sams = publisherHome.findByName("Sams");
ejb = bookHome.findByName("Enterprise Java Beans (3rd Edition)");
jms = bookHome.findByName("Java Message Service");
jmx = bookHome.findByName(
"JMX: Managing J2EE with Java Management Extensions");
jboss = bookHome.findByName("JBOSS Administration and Development");
dain = authorHome.findByName("Dain Sundstrom");
}
protected void tearDown() {
oreilly = null;
sams = null;
ejb = null;
jms = null;
jmx = null;
jboss = null;
}
public void testSetUp() throws Exception {
Collection oreillyBooks = oreilly.getBooks();
assertEquals(2, oreillyBooks.size());
assertTrue(oreillyBooks.contains(ejb));
assertTrue(oreillyBooks.contains(jms));
assertTrue(ejb.getPublisher().isIdentical(oreilly));
assertTrue(jms.getPublisher().isIdentical(oreilly));
Collection samsBooks = sams.getBooks();
assertEquals(2, samsBooks.size());
assertTrue(samsBooks.contains(jmx));
assertTrue(samsBooks.contains(jboss));
assertTrue(jmx.getPublisher().isIdentical(sams));
assertTrue(jboss.getPublisher().isIdentical(sams));
}
public void testReadonlyCMPField() throws Exception {
try {
oreilly.setName("Stuff");
fail("Should have gotten exception from Publisher.setName");
} catch(Exception e) {
}
}
public void testReadonlyEntityCMPFieldChange() throws Exception {
try {
dain.setName("Stuff");
fail("Should have gotten exception from Author.setName");
} catch(Exception e) {
}
}
public void testReadonlyEntityCreate() throws Exception {
try {
AuthorHome authorHome = getAuthorHome();
authorHome.create(new Integer(44));
fail("Should have gotten exception from AuthorHome.create");
} catch(Exception e) {
}
}
public void testReadonlySetFK() throws Exception {
try {
jboss.setPublisher(sams);
fail("Should have gotten exception from Book.setPublisher");
} catch(Exception e) {
}
}
public void testReadonlySetCollection() throws Exception {
try {
sams.setBooks(new HashSet());
fail("Should have gotten exception from Publisher.setBooks");
} catch(Exception e) {
}
}
public void testReadonlyCollectionAdd() throws Exception {
try {
sams.getBooks().add(jboss);
fail("Should have gotten exception from Book.setPublisher");
} catch(Exception e) {
}
}
public void testReadonlyCollectionRemove() throws Exception {
try {
sams.getBooks().remove(ejb);
fail("Should have gotten exception from Book.setPublisher");
} catch(Exception e) {
}
}
public void setUpEJB(Properties props) throws Exception {
cleanDB();
Connection con = null;
PreparedStatement ps = null;
try {
con = getConnection();
ps = con.prepareStatement(
"INSERT INTO PublisherEJB (id, name) " +
"VALUES (?,?)");
// O'Reilly
ps.setInt(1, 1);
ps.setString(2, "O'Reilly & Associates");
if(ps.executeUpdate() != 1) {
fail("Failed to add Publisher to database");
}
// Sams
ps.setInt(1, 2);
ps.setString(2, "Sams");
if(ps.executeUpdate() != 1) {
fail("Failed to add Publisher to database");
}
ps.close();
ps = con.prepareStatement(
"INSERT INTO Book (id, name, isbn, publisher) " +
"VALUES (?,?,?,?)");
ps.setInt(1, -1);
ps.setString(2, "Enterprise Java Beans (3rd Edition)");
ps.setString(3, "0596002262");
ps.setInt(4, 1);
if(ps.executeUpdate() != 1) {
fail("Failed to add Book to database");
}
ps.setInt(1, -2);
ps.setString(2, "Java Message Service");
ps.setString(3, "0596000685 ");
ps.setInt(4, 1);
if(ps.executeUpdate() != 1) {
fail("Failed to add Book to database");
}
ps.setInt(1, -3);
ps.setString(2, "JMX: Managing J2EE with Java Management Extensions");
ps.setString(3, "0672322889");
ps.setInt(4, 2);
if(ps.executeUpdate() != 1) {
fail("Failed to add Book to database");
}
ps.setInt(1, -4);
ps.setString(2, "JBOSS Administration and Development");
ps.setString(3, "0672323478");
ps.setInt(4, 2);
if(ps.executeUpdate() != 1) {
fail("Failed to add Book to database");
}
ps = con.prepareStatement(
"INSERT INTO Author (id, name) " +
"VALUES (?,?)");
// O'Reilly
ps.setInt(1, 1);
ps.setString(2, "Dain Sundstrom");
if(ps.executeUpdate() != 1) {
fail("Failed to add Author to database");
}
} finally {
if(ps != null) {
try {
ps.close();
} catch(SQLException e) {
log.debug("failed", e);
}
}
if(con != null) {
try {
con.close();
} catch(SQLException e) {
log.debug("failed", e);
}
}
}
}
public void tearDownEJB(Properties props) throws Exception {
cleanDB();
}
public void cleanDB() throws Exception {
Connection con = null;
Statement statement = null;
try {
con = getConnection();
statement = con.createStatement();
statement.executeUpdate("DELETE FROM Book");
statement.executeUpdate("DELETE FROM PublisherEJB");
statement.executeUpdate("DELETE FROM Author");
} finally {
if(statement != null) {
try {
statement.close();
} catch(SQLException e) {
log.debug("failed", e);
}
}
if(con != null) {
try {
con.close();
} catch(SQLException e) {
log.debug("failed", e);
}
}
}
}
}