blob: 02df88fc046ac70b4afbc818f99e4cca97b2c0a5 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 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 v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.directmap;
import org.eclipse.persistence.sessions.UnitOfWork;
import org.eclipse.persistence.queries.ReadObjectQuery;
import org.eclipse.persistence.internal.sessions.UnitOfWorkChangeSet;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.testing.models.directmap.*;
/**
* Tests the merge change set into a distributed cache with a direct map mapping
* BUG# 2783391
*
* @author Guy Pelletier
* @version 1.0
*/
public class MergeChangeSetWithIndirectDirectMapMappingTest extends TransactionalTestCase {
boolean m_exceptionCaught;
DirectMapMappings mapsQueryResult;
public MergeChangeSetWithIndirectDirectMapMappingTest() {
setDescription("Tests the merge change set over a distributed cache using a indirect direct map mapping");
}
@Override
public void setup() {
m_exceptionCaught = false;
super.setup();
}
@Override
public void test() throws Exception {
// put a new value in, will now be in the cache
UnitOfWork uow1 = getSession().acquireUnitOfWork();
DirectMapMappings maps = (DirectMapMappings)uow1.registerObject(new DirectMapMappings());
maps.indirectionDirectMap.put(1, "bogus");
maps.indirectionDirectMap.put(3, "third");
uow1.commit();
UnitOfWork uow2 = getSession().acquireUnitOfWork();
DirectMapMappings mapsClone = (DirectMapMappings)uow2.registerObject(maps);
mapsClone.indirectionDirectMap.put(2, "axemen");
mapsClone.indirectionDirectMap.put(1, "guy");
UnitOfWorkChangeSet changes = (UnitOfWorkChangeSet)uow2.getCurrentChanges();
getSession().refreshObject(mapsClone);
uow2.commit();
ReadObjectQuery query = new ReadObjectQuery(mapsClone);
query.shouldCheckCacheOnly();
mapsQueryResult = (DirectMapMappings)getSession().executeQuery(query);
}
@Override
public void verify() throws Exception {
if (m_exceptionCaught) {
throw new TestErrorException("Merge change set into distributed cache failed with direct-map mapping");
}
// Some checks to ensure it actually worked as expected
if (!mapsQueryResult.indirectionDirectMap.containsKey(1)) {
throw new TestErrorException("Change set did not merge into cache properly");
} else if (!mapsQueryResult.indirectionDirectMap.get(1).equals("guy")) {
throw new TestErrorException("Change set did not merge into cache properly");
} else if (!mapsQueryResult.indirectionDirectMap.containsKey(2)) {
throw new TestErrorException("Change set did not merge into cache properly");
} else if (!mapsQueryResult.indirectionDirectMap.get(2).equals("axemen")) {
throw new TestErrorException("Change set did not merge into cache properly");
} else if (!mapsQueryResult.indirectionDirectMap.containsKey(3)) {
throw new TestErrorException("Change set did not merge into cache properly");
}
}
}