blob: 41d76ad6862daa027b27ab95f9da64db8538b375 [file] [log] [blame]
/*******************************************************************************
* 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.aggregate;
import java.util.*;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.testing.framework.ReadObjectTest;
import org.eclipse.persistence.testing.models.aggregate.Computer;
import org.eclipse.persistence.testing.models.aggregate.Employee;
import org.eclipse.persistence.testing.models.aggregate.Language;
import org.eclipse.persistence.testing.models.aggregate.ProjectDescription;
import org.eclipse.persistence.testing.models.aggregate.Responsibility;
public class DescriptorRefreshCacheTest extends ReadObjectTest {
public ClassDescriptor resDescriptor;
public ClassDescriptor langDescriptor;
public ClassDescriptor comDescriptor;
public ClassDescriptor empDescriptor;
/**
* DescriptorRefreshCacheTest constructor comment.
*/
public DescriptorRefreshCacheTest(Object originalObject) {
setOriginalObject(originalObject);
setName("DescriptorRefreshCacheTest(" + originalObject.getClass() + ")");
setDescription("This test case tests refresh cache hit property on descriptor.");
}
protected void changeObject(Employee employee) {
employee.setFirstName("Zack");
ProjectDescription projectDescription = employee.getProjectDescription();
projectDescription.setDescription("FBI Project");
((Vector)projectDescription.getResponsibilities().getValue()).removeElement(((Vector)projectDescription.getResponsibilities().getValue()).firstElement());
((Vector)projectDescription.getResponsibilities().getValue()).addElement(Responsibility.example1(employee));
((Vector)projectDescription.getResponsibilities().getValue()).addElement(Responsibility.example2(employee));
((Vector)projectDescription.getLanguages().getValue()).removeElement(((Vector)projectDescription.getLanguages().getValue()).firstElement());
((Vector)projectDescription.getLanguages().getValue()).addElement(Language.example1());
((Vector)projectDescription.getLanguages().getValue()).addElement(Language.example2());
((Computer)projectDescription.getComputer().getValue()).setDescription("Newton");
}
public void reset() {
this.empDescriptor.dontAlwaysRefreshCache();
this.empDescriptor.dontDisableCacheHits();
this.resDescriptor.dontAlwaysRefreshCache();
this.langDescriptor.dontAlwaysRefreshCache();
this.comDescriptor.dontAlwaysRefreshCache();
this.comDescriptor.dontDisableCacheHits();
rollbackTransaction();
getSession().getIdentityMapAccessor().initializeIdentityMaps();
}
protected void setup() {
beginTransaction();
getSession().getIdentityMapAccessor().initializeIdentityMaps();
this.empDescriptor = getSession().getClassDescriptor(Employee.class);
this.resDescriptor = getSession().getClassDescriptor(Responsibility.class);
this.langDescriptor = getSession().getClassDescriptor(Language.class);
this.comDescriptor = getSession().getClassDescriptor(Computer.class);
this.empDescriptor.alwaysRefreshCache();
this.empDescriptor.disableCacheHits();
this.resDescriptor.alwaysRefreshCache();
this.langDescriptor.alwaysRefreshCache();
this.comDescriptor.alwaysRefreshCache();
this.comDescriptor.disableCacheHits();
this.objectFromDatabase = getSession().readObject(this.originalObject);
}
public void test() {
Employee originalState = (Employee)this.objectFromDatabase;
String originalFirstName = originalState.getFirstName();
String originalProjectDescription = originalState.getProjectDescription().getDescription();
Vector originalResponsibilities = (Vector)((Vector)originalState.getProjectDescription().getResponsibilities().getValue()).clone();
Vector originalLanguages = (Vector)((Vector)originalState.getProjectDescription().getLanguages().getValue()).clone();
Computer originalComputer = (Computer)originalState.getProjectDescription().getComputer().getValue();
String originalComputerDescription = originalComputer.getDescription();
changeObject(originalState);
Employee employee = (Employee)getSession().readObject(originalState);
if (employee != originalState) {
throw new TestErrorException("Always refresh cache does not work.");
}
if (originalComputer != (Computer)employee.getProjectDescription().getComputer().getValue()) {
throw new TestErrorException("Always refresh cache does not work.");
}
for (Enumeration enumtr = originalResponsibilities.elements(); enumtr.hasMoreElements();) {
Responsibility responsibility = (Responsibility)enumtr.nextElement();
if (!((Vector)employee.getProjectDescription().getResponsibilities().getValue()).contains(responsibility)) {
throw new TestErrorException("Always refresh cache does not work.");
}
}
for (Enumeration enumtr = originalLanguages.elements(); enumtr.hasMoreElements();) {
Language language = (Language)enumtr.nextElement();
if (!((Vector)employee.getProjectDescription().getLanguages().getValue()).contains(language)) {
throw new TestErrorException("Always refresh cache does not work.");
}
}
ProjectDescription projectDescription = employee.getProjectDescription();
Vector responsibilities = (Vector)projectDescription.getResponsibilities().getValue();
Vector languages = (Vector)projectDescription.getLanguages().getValue();
Computer computer = (Computer)projectDescription.getComputer().getValue();
if (!employee.getFirstName().equals(originalFirstName)) {
throw new TestErrorException("Always refresh cache does not work.");
}
if (!projectDescription.getDescription().equals(originalProjectDescription)) {
throw new TestErrorException("Always refresh cache does not work.");
}
if (responsibilities.size() != originalResponsibilities.size()) {
throw new TestErrorException("Always refresh cache does not work.");
}
if (languages.size() != originalLanguages.size()) {
throw new TestErrorException("Always refresh cache does not work.");
}
if (!computer.getDescription().equals(originalComputerDescription)) {
throw new TestErrorException("Always refresh cache does not work.");
}
}
}