/*
* 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.service.importer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.InputStream;
import javax.inject.Inject;
import org.cyclop.model.CqlQuery;
import org.cyclop.model.CqlQueryResult;
import org.cyclop.model.CqlQueryType;
import org.cyclop.service.cassandra.QueryService;
import org.cyclop.service.importer.model.ImportConfig;
import org.cyclop.service.importer.model.ImportStats;
import org.cyclop.test.AbstractTestCase;
import org.junit.Before;
import org.junit.Test;
/** @author Maciej Miklas */
public abstract class AbstractImporterCase extends AbstractTestCase {
@Inject
private QueryService queryService;
abstract QueryImporter getImporter();
@Test
public void testImportOneQueryPerLine() throws Exception {
try (InputStream fio = getClass().getResourceAsStream("/cql/createDemoData.cql")) {
ResultConsumer rc = new ResultConsumer();
ImportStats stats = getImporter().importScript(fio, rc,
new ImportConfig().withContinueWithErrors(true).withUpdateHistory(true));
assertEquals(rc.toString(), 6, rc.size());
assertEquals(rc.error.toString(), 0, rc.error.size());
assertEquals(rc.toString(), 6, rc.success.size());
assertEquals(rc.toString(), 0, stats.errorCount);
assertEquals(rc.toString(), 6, stats.successCount);
assertTrue(
rc.toString(),
rc.success
.contains(new CqlQuery(
CqlQueryType.UNKNOWN,
"INSERT INTO MyBooks (id,title,pages,price) VALUES (0f6939a7-62f7-4ed0-a909-6fc302764c8d,'just title.....',2299,{'DE':4,'EU':34})")));
}
}
@Test
public void testImportLineBreaks() throws Exception {
queryService.execute(new CqlQuery(CqlQueryType.SELECT,
"delete from CqlDemo.MyBooks where id=644556a9-651b-45b3-bd01-cc807c64bd4f"));
CqlQuery testCql = new CqlQuery(CqlQueryType.SELECT,
"select title from cqldemo.mybooks where id=644556a9-651b-45b3-bd01-cc807c64bd4f");
assertFalse(queryService.execute(testCql).iterator().hasNext());
try (InputStream fio = getClass().getResourceAsStream("/cql/testImportLineBreaks.cql")) {
ResultConsumer rc = new ResultConsumer();
ImportStats stats = getImporter().importScript(fio, rc,
new ImportConfig().withContinueWithErrors(true).withUpdateHistory(true));
assertEquals(7, rc.size());
assertEquals(rc.error.toString(), 0, rc.error.size());
assertEquals(7, rc.success.size());
assertEquals(0, stats.errorCount);
assertEquals(7, stats.successCount);
assertTrue(
rc.toString(),
rc.success
.contains(new CqlQuery(
CqlQueryType.UNKNOWN,
"INSERT INTO CqlDemo.MyBooks (id,title,genre,publishDate,description,authors,pages,price,paperType) VALUES (1ff18f41-cfb8-45ff-9e89-fb20f95ffc5d,'XML Developers Guide','Computer','2000-10-01','An in-depth look at creating applications with XML.',{'Gambardella, Matthew','Marcin Miklas','Fryderyk Zajac','Anna Zajac'},112291,{'D':3.85,'E':4.11,'F':4.00},'white and soft')")));
assertTrue(
rc.toString(),
rc.success
.contains(new CqlQuery(
CqlQueryType.UNKNOWN,
"INSERT INTO CqlDemo.MyBooks (id,title,pages,price) VALUES (644556a9-651b-45b3-bd01-cc807c64bd4f,'some text in title ;)',112291,{'DE':4,'EU':34})")));
assertTrue(
rc.toString(),
rc.success
.contains(new CqlQuery(
CqlQueryType.UNKNOWN,
"INSERT INTO CqlDemo.MyBooks (id,title,pages,price) VALUES (38710416-6253-4a77-a31c-6429f16f3837,'just title..... NR 2',112291,{'DE':4,'EU':4})")));
assertTrue(
rc.toString(),
rc.success
.contains(new CqlQuery(
CqlQueryType.UNKNOWN,
"INSERT INTO CqlDemo.MyBooks (id,title,pages,price) VALUES (c746c90c-94dc-45dc-9b47-e410e46a0e61,'just title..... urrr...',112291,{'DE':44,'EU':343})")));
assertTrue(
rc.toString(),
rc.success
.contains(new CqlQuery(
CqlQueryType.UNKNOWN,
"INSERT INTO CqlDemo.MyBooks (id,title,pages,price) VALUES (6ceb1c47-0955-4654-80d4-5230b88467d2,'just title.....',112291,{'DE':4,'EU':34})")));
assertTrue(
rc.toString(),
rc.success
.contains(new CqlQuery(
CqlQueryType.UNKNOWN,
"INSERT INTO CqlDemo.MyBooks (id, title,pages,price) VALUES (4d8c695c-a8e9-4f74-8462-1def6ec075d3,'just dasd title.....',112291,{'DE':4,'EU':344})")));
assertTrue(
rc.toString(),
rc.success
.contains(new CqlQuery(
CqlQueryType.UNKNOWN,
"INSERT INTO CqlDemo.MyBooks (id,title,pages, price) VALUES (e1390b2e-1393-490b-aa6e-88874ac1fc88, 'just title. wed dwe....',112291, {'DE':4,'EU':324})")));
}
assertTrue(queryService.execute(testCql).iterator().hasNext());
assertEquals("some text in title ;)", queryService.execute(testCql).iterator().next().getString("title"));
}
@Test
public void testImportAmount_1() throws Exception {
execImport(1, 0, 12);
}
@Test
public void testImportAmount_3() throws Exception {
execImport(3, 0, 6);
}
@Test
public void testImportAmount_6() throws Exception {
execImport(6, 0, 21);
}
@Test
public void testImportAmount_7() throws Exception {
execImport(7, 0, 28);
}
@Test
public void testImportAmount_8() throws Exception {
execImport(8, 1, 30);
}
@Test
public void testImportAmount_9() throws Exception {
execImport(9, 0, 45);
}
@Test
public void testImportAmount_15() throws Exception {
execImport(15, 0, 120);
}
@Test
public void testImportAmount_32() throws Exception {
execImport(32, 0, 528);
}
@Test
public void testImportAmount_116() throws Exception {
execImport(116, 3, 6613);
}
private void execImport(int scrNr, int amountError, long counterValue) throws Exception {
String script = "/cql/testImportOneCol_" + scrNr + ".cql";
try (InputStream fio = getClass().getResourceAsStream(script)) {
ResultConsumer rc = new ResultConsumer();
ImportStats stats = getImporter().importScript(fio, rc,
new ImportConfig().withContinueWithErrors(true).withUpdateHistory(true));
assertEquals(script + "- " + rc, amountError, rc.error.size());
assertEquals(script + "- " + rc, scrNr - amountError, rc.success.size());
assertEquals(script + "- " + rc, scrNr, rc.size());
assertEquals(script + "- " + rc, amountError, stats.errorCount);
assertEquals(script + "- " + rc, scrNr, stats.successCount + stats.errorCount);
}
{
CqlQueryResult res = queryService.execute(new CqlQuery(CqlQueryType.SELECT,
"select cval from CqlDemo.MyCounter where id=44a2054c-f98b-43a7-833d-0e1358fdaa82"));
assertEquals(script + " - " + res, 1, res.rowMetadata.columns.size());
assertTrue(res.iterator().hasNext());
long foundCounterVal = res.iterator().next().getLong("cval");
assertEquals(script, counterValue, foundCounterVal);
}
}
@Before
public void before() throws Exception {
super.setup();
{
queryService.execute(new CqlQuery(CqlQueryType.DELETE,
"delete from CqlDemo.MyBooks where id=44a2054c-f98b-43a7-833d-0e1358fdaa82"));
CqlQueryResult res = queryService.execute(new CqlQuery(CqlQueryType.SELECT,
"select impcol from CqlDemo.MyBooks where id=44a2054c-f98b-43a7-833d-0e1358fdaa82"));
assertFalse(res.toString(), res.iterator().hasNext());
}
{
CqlQueryResult res = queryService.execute(new CqlQuery(CqlQueryType.SELECT,
"select cval from CqlDemo.MyCounter where id=44a2054c-f98b-43a7-833d-0e1358fdaa82"));
if (!res.isEmpty()) {
long foundCounterVal = res.iterator().next().getLong("cval");
queryService.execute(new CqlQuery(CqlQueryType.UPDATE, "UPDATE CqlDemo.MyCounter SET cval=cval-"
+ foundCounterVal + " WHERE id=44a2054c-f98b-43a7-833d-0e1358fdaa82"));
}
}
}
}