/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
package org.pentaho.di.www;
import junit.framework.TestCase;
public class TransformationMapTest extends TestCase {
public void testServerSocketPort() throws Exception {
TransformationMap map = new TransformationMap();
SocketPortAllocation port;
// A : Give back start of range
//
port =
map.allocateServerSocketPort(
40000, "host1", "id1", "trans1", "slave-1", "source1", "0", "slave-2", "target1", "0" );
assertEquals( 40000, port.getPort() );
// B : Different host: give back start of range...
//
port =
map.allocateServerSocketPort(
40000, "host2", "id2", "trans1", "slave-2", "source1", "0", "slave-3", "target1", "0" );
assertEquals( 40000, port.getPort() );
// C : Same host, different slave, new port
//
port =
map.allocateServerSocketPort(
40000, "host1", "id1", "trans1", "slave-2", "source1", "0", "slave-3", "target1", "0" );
assertEquals( 40001, port.getPort() );
// D : Same host, same slave, different transformation
//
port =
map.allocateServerSocketPort(
40000, "host1", "id2", "trans2", "slave-2", "source1", "0", "slave-3", "target1", "0" );
assertEquals( 40002, port.getPort() );
// E : Same host, same slave, same transformation, different step copy
//
port =
map.allocateServerSocketPort(
40000, "host1", "id2", "trans2", "slave-2", "source1", "1", "slave-3", "target1", "1" );
assertEquals( 40003, port.getPort() );
// Test memory, look up A-E again
//
assertEquals( 40000, map.allocateServerSocketPort(
40000, "host1", "id1", "trans1", "slave-1", "source1", "0", "slave-2", "target1", "0" ).getPort() );
assertEquals( 40000, map.allocateServerSocketPort(
40000, "host2", "id2", "trans1", "slave-2", "source1", "0", "slave-3", "target1", "0" ).getPort() );
assertEquals( 40001, map.allocateServerSocketPort(
40000, "host1", "id1", "trans1", "slave-2", "source1", "0", "slave-3", "target1", "0" ).getPort() );
assertEquals( 40002, map.allocateServerSocketPort(
40000, "host1", "id2", "trans2", "slave-2", "source1", "0", "slave-3", "target1", "0" ).getPort() );
assertEquals( 40003, map.allocateServerSocketPort(
40000, "host1", "id2", "trans2", "slave-2", "source1", "1", "slave-3", "target1", "1" ).getPort() );
// Do not ignore the carte object ID, since parallel clustering should be possible!
//
assertEquals( 40004, map.allocateServerSocketPort(
40004, "host1", "id2", "trans1", "slave-1", "source1", "0", "slave-2", "target1", "0" ).getPort() );
// Remove 40002 from the map...
//
map.deallocateServerSocketPort( 40002, "host1" );
// See if we get the same port back by filling up the gap in the rage again...
//
assertEquals( 40002, map.allocateServerSocketPort(
40000, "host1", "id2", "trans2", "slave-2", "source1", "0", "slave-3", "target1", "0" ).getPort() );
}
}