blob: cf8fe1b25f146c4cb95ee834eb9b25a4da49a1b8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.cassandra.simulator.test;
import java.io.IOException;
import java.util.EnumMap;
import java.util.IdentityHashMap;
import org.junit.Test;
import org.apache.cassandra.concurrent.ExecutorFactory;
import org.apache.cassandra.concurrent.ExecutorPlus;
import org.apache.cassandra.distributed.api.ConsistencyLevel;
import org.apache.cassandra.simulator.ActionList;
import org.apache.cassandra.simulator.Debug;
import org.apache.cassandra.simulator.cluster.ClusterActionListener.NoOpListener;
import org.apache.cassandra.simulator.cluster.ClusterActions;
import org.apache.cassandra.simulator.cluster.ClusterActions.Options;
import org.apache.cassandra.utils.concurrent.CountDownLatch;
import static org.apache.cassandra.simulator.cluster.ClusterActions.InitialConfiguration.initializeAll;
import static org.apache.cassandra.simulator.cluster.ClusterActions.Options.noActions;
public class TrivialSimulationTest extends SimulationTestBase
{
@Test
public void trivialTest() throws IOException // for demonstration/experiment purposes
{
simulate((simulation) -> {
Options options = noActions(simulation.cluster.size());
ClusterActions clusterActions = new ClusterActions(simulation.simulated, simulation.cluster,
options, new NoOpListener(), new Debug(new EnumMap<>(Debug.Info.class), new int[0]));
return ActionList.of(clusterActions.initializeCluster(initializeAll(simulation.cluster.size())),
simulation.schemaChange(1, "CREATE KEYSPACE ks WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 3}"),
simulation.schemaChange(1, "CREATE TABLE IF NOT EXISTS ks.tbl (pk int PRIMARY KEY, v int)"));
},
(simulation) -> ActionList.of(simulation.executeQuery(1, "INSERT INTO ks.tbl VALUES (1,1)", ConsistencyLevel.QUORUM),
simulation.executeQuery(1, "SELECT * FROM ks.tbl WHERE pk = 1", ConsistencyLevel.QUORUM)),
(config) -> config
.threadCount(10)
.nodes(3, 3)
.dcs(1, 1));
}
@Test
public void componentTest()
{
simulate(arr(() -> {
ExecutorPlus executor = ExecutorFactory.Global.executorFactory().pooled("name", 10);
CountDownLatch latch = CountDownLatch.newCountDownLatch(5);
for (int i = 0; i < 5; i++)
{
executor.submit(() -> {
latch.decrement();
try
{
latch.await();
}
catch (InterruptedException e)
{
throw new RuntimeException(e);
}
});
}
}),
() -> {});
}
@Test
public void identityHashMapTest()
{
simulate(arr(() -> new IdentityHashMap<>().put(1, 1)),
() -> {});
}
}