/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.core.workspace;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.teiid.designer.core.util.UnitTestDebugSettings;
import org.teiid.designer.core.workspace.FakeOpenable;
import org.teiid.designer.core.workspace.FakeOpenableModelWorkspaceItem;
import junit.extensions.TestSetup;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class TestModelBufferManager extends TestCase {
static UnitTestDebugSettings DEBUG_SETTINGS = new UnitTestDebugSettings();
private ModelBufferManager mgr;
/**
* Constructor for TestModelBufferManager.
*
* @param name
*/
public TestModelBufferManager( String name ) {
super(name);
}
/*
* @see TestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
super.setUp();
this.mgr = new ModelBufferManager(); // don't use the default so that it is clean for each test
}
/*
* @see TestCase#tearDown()
*/
@Override
protected void tearDown() throws Exception {
super.tearDown();
this.mgr = null;
}
/**
* Test suite, with one-time setup.
*/
public static Test suite() {
TestSuite suite = new TestSuite("TestModelBufferManager"); //$NON-NLS-1$
suite.addTestSuite(TestModelBufferManager.class);
// One-time setup and teardown
return new TestSetup(suite) {
@Override
public void setUp() {
DEBUG_SETTINGS.acquire(); // record current settings
// Make any changes to the settings ...
// ModelerCore.DEBUG_MODEL_WORKSPACE = true;
}
@Override
public void tearDown() {
DEBUG_SETTINGS.reset(); // undo the changes made here
}
};
}
public int getOpenBufferSpaceLimit() {
return this.mgr.getOpenBufferCache().getSpaceLimit();
}
public static List createOpenables( final int num ) {
final List result = new ArrayList();
for (int i = 0; i < num; i++) {
result.add(new FakeOpenable("Some key")); //$NON-NLS-1$
}
return result;
}
public ModelBuffer helpTestCreateBuffer( final ModelBufferManager bufferMgr,
final Openable openable,
final boolean shouldSucceed ) throws Exception {
// Should always be able to create a buffer, because not added to the open cache upon creation
try {
final ModelBuffer buffer = bufferMgr.createBuffer(openable);
if (!shouldSucceed) {
fail("Failed to catch illegal parameter when creating a buffer"); //$NON-NLS-1$
}
assertNotNull(buffer);
return buffer;
} catch (IllegalArgumentException e) {
if (shouldSucceed) {
throw e;
}
}
return null; // should never get here
}
public void testGetDefaultBufferManager() {
final ModelBufferManager defaultMgr = ModelBufferManager.getDefaultBufferManager();
assertNotNull(defaultMgr);
}
public void testModelBufferManager() {
final ModelBufferManager newMgr = new ModelBufferManager();
assertNotNull(newMgr);
}
public void testGetOpenBufferCache() {
assertNotNull(this.mgr.getOpenBufferCache());
}
public void testCreateBuffer() throws Exception {
helpTestCreateBuffer(this.mgr, new FakeOpenableModelWorkspaceItem("Some id"), true); //$NON-NLS-1$
}
public void testCreateBufferWithWrongOpenable() throws Exception {
helpTestCreateBuffer(this.mgr, new FakeOpenable("Some id"), false); //$NON-NLS-1$
}
public void testGetDefaultBufferFactory() {
assertSame(this.mgr, this.mgr.getDefaultBufferFactory());
}
public void testAddBufferAndRemoveBuffer() throws Exception {
final int numOpen = this.mgr.getOpenBufferCache().size();
final FakeOpenable openable = new FakeOpenableModelWorkspaceItem("Some id"); //$NON-NLS-1$
final ModelBuffer buffer = helpTestCreateBuffer(this.mgr, openable, true);
this.mgr.addBuffer(buffer);
final int numOpenAfter = this.mgr.getOpenBufferCache().size();
assertEquals(numOpenAfter, numOpen + 1);
this.mgr.removeBuffer(buffer);
final int numOpenAfterRemove = this.mgr.getOpenBufferCache().size();
assertEquals(numOpenAfterRemove, numOpen);
}
public void testGetOpenBuffer() throws Exception {
final FakeOpenable openable = new FakeOpenableModelWorkspaceItem("Some id"); //$NON-NLS-1$
final ModelBuffer buffer = helpTestCreateBuffer(this.mgr, openable, true);
this.mgr.addBuffer(buffer);
final FakeOpenable openable2 = new FakeOpenableModelWorkspaceItem("Some other id"); //$NON-NLS-1$
final ModelBuffer buffer2 = helpTestCreateBuffer(this.mgr, openable2, true);
this.mgr.addBuffer(buffer2);
final ModelBuffer foundBuffer = this.mgr.getOpenBuffer(openable);
assertSame(foundBuffer, buffer);
final ModelBuffer foundBuffer2 = this.mgr.getOpenBuffer(openable2);
assertSame(foundBuffer2, buffer2);
}
public void testGetOpenBufferWithNullOpenable() {
try {
this.mgr.getOpenBuffer(null);
fail("Should not have succeeded"); //$NON-NLS-1$
} catch (IllegalArgumentException e) {
// this is what should have happened
}
}
public void testGetOpenBufferWithUnknownOpenable() {
final FakeOpenable openableNotAdded = new FakeOpenableModelWorkspaceItem("Some id"); //$NON-NLS-1$
final ModelBuffer foundBuffer = this.mgr.getOpenBuffer(openableNotAdded);
assertNull(foundBuffer);
}
public void testGetOpenBuffers() {
final Iterator iter = this.mgr.getOpenBuffers();
while (iter.hasNext()) {
fail("Should not have any open buffers upon construction"); //$NON-NLS-1$
}
}
public void testCreateMoreBuffersThanSizeLimit() throws Exception {
final int limit = getOpenBufferSpaceLimit() * 3;
for (int i = 0; i != limit; ++i) {
helpTestCreateBuffer(this.mgr, new FakeOpenableModelWorkspaceItem("Some id"), true); //$NON-NLS-1$
}
}
}