/* * 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.cyclop.test; import static org.junit.Assert.assertNotNull; import java.net.URL; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.UUID; import org.apache.commons.lang.StringUtils; import org.cassandraunit.utils.EmbeddedCassandraServerHelper; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.Session; /** @author Maciej Miklas */ public class EmbeddedCassandra { public final static String YAML_NAME = System.getProperty("cassandra_yaml"); private Cluster cluster; private Session session; private boolean running = false; public void start() throws Exception { if (running) { return; } assertNotNull("Missing system property cassandra_yaml", YAML_NAME); EmbeddedCassandraServerHelper.startEmbeddedCassandra("/" + YAML_NAME); cluster = Cluster.builder().addContactPoints("localhost").withPort(9042).build(); assertNotNull(cluster); session = cluster.connect(); assertNotNull(session); executeScript(session, "/cql/createDemoTables.cql"); executeScript(session, "/cql/createDemoData.cql"); createTestData(session); running = true; } private void createTestData(Session session) { session.execute("USE CqlDemo"); // all tables have this common value: deesc=TEST_SET_1 { for (int i = 0; i < 50; i++) { StringBuilder cql = new StringBuilder("INSERT INTO CompoundTest (id,id2,id3,deesc) VALUES ("); cql.append(UUID.randomUUID()).append(","); cql.append(i); cql.append(",'abc','TEST_SET_1')"); session.execute(cql.toString()); } } // all tables have this common value: pages = 2212 { for (int i = 0; i < 100; i++) { StringBuilder cql = new StringBuilder( "INSERT INTO MyBooks (id,title,genre,publishDate,description,authors,pages,price,idx) VALUES ("); cql.append(UUID.randomUUID()).append(","); cql.append("'Midnight Rain-").append(i).append("',"); if (i == 0) { cql.append("'Fantasy',"); } else { cql.append("null,"); } cql.append("'2000-10-01',"); cql.append("'Description.....-").append(i).append("',"); cql.append("{'Ralls, Kim'},2212, {'D':2.85,'E':3.11,'F':4.22},"); cql.append(i).append(")"); session.execute(cql.toString()); } } } private void executeScript(Session session, String scriptName) throws Exception { URL scriptURL = getClass().getResource(scriptName); assertNotNull(scriptName, scriptURL); Path scriptPath = Paths.get(scriptURL.toURI()); List<String> lines = Files.readAllLines(scriptPath, Charset.forName("UTF-8")); for (String line : lines) { line = line.replaceAll("\\p{Cc}", ""); line = StringUtils.trimToNull(line); if (line == null) { continue; } try { session.execute(line); } catch (Exception e) { throw new Exception("Error executing:" + line + " - got: " + e.getMessage(), e); } } } public Cluster getCluster() { return cluster; } public void stop() throws Exception { cluster.close(); } public Session getSession() { return session; } }