blob: 55ec6654ed5f136caad447cd0dadb56c2e31edc1 [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.gora.avro.store;
import static org.apache.gora.examples.WebPageDataCreator.URLS;
import static org.apache.gora.examples.WebPageDataCreator.URL_INDEXES;
import static org.apache.gora.examples.WebPageDataCreator.createWebPageData;
import java.io.IOException;
import junit.framework.Assert;
import org.apache.gora.avro.store.AvroStore.CodecType;
import org.apache.gora.examples.generated.Employee;
import org.apache.gora.examples.generated.WebPage;
import org.apache.gora.query.Query;
import org.apache.gora.query.Result;
import org.apache.gora.store.DataStore;
import org.apache.gora.store.DataStoreFactory;
import org.apache.gora.store.DataStoreTestUtil;
import org.apache.gora.util.GoraException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Test case for {@link AvroStore}.
*/
public class TestAvroStore {
public static final String EMPLOYEE_OUTPUT =
System.getProperty("test.build.data") + "/testavrostore/employee.data";
public static final String WEBPAGE_OUTPUT =
System.getProperty("test.build.data") + "/testavrostore/webpage.data";
protected AvroStore<String,Employee> employeeStore;
protected AvroStore<String,WebPage> webPageStore;
protected Configuration conf = new Configuration();
@Before
public void setUp() throws Exception {
employeeStore = createEmployeeDataStore();
employeeStore.initialize(String.class, Employee.class, DataStoreFactory.createProps());
employeeStore.setOutputPath(EMPLOYEE_OUTPUT);
employeeStore.setInputPath(EMPLOYEE_OUTPUT);
webPageStore = new AvroStore<String, WebPage>();
webPageStore.initialize(String.class, WebPage.class, DataStoreFactory.createProps());
webPageStore.setOutputPath(WEBPAGE_OUTPUT);
webPageStore.setInputPath(WEBPAGE_OUTPUT);
}
@SuppressWarnings("unchecked")
protected AvroStore<String, Employee> createEmployeeDataStore() throws GoraException {
return DataStoreFactory.getDataStore(
AvroStore.class, String.class, Employee.class, conf);
}
protected AvroStore<String, WebPage> createWebPageDataStore() {
return new AvroStore<String, WebPage>();
}
@After
public void tearDown() throws Exception {
deletePath(employeeStore.getOutputPath());
deletePath(webPageStore.getOutputPath());
employeeStore.close();
webPageStore.close();
}
private void deletePath(String output) throws IOException {
if(output != null) {
Path path = new Path(output);
path.getFileSystem(conf).delete(path, true);
}
}
@Test
public void testNewInstance() throws IOException {
DataStoreTestUtil.testNewPersistent(employeeStore);
}
@Test
public void testCreateSchema() throws IOException {
DataStoreTestUtil.testCreateEmployeeSchema(employeeStore);
}
@Test
public void testAutoCreateSchema() throws IOException {
DataStoreTestUtil.testAutoCreateSchema(employeeStore);
}
@Test
public void testPut() throws IOException {
DataStoreTestUtil.testPutEmployee(employeeStore);
}
@Test
public void testQuery() throws IOException {
createWebPageData(webPageStore);
webPageStore.close();
webPageStore.setInputPath(webPageStore.getOutputPath());
testQueryWebPages(webPageStore);
}
@Test
public void testQueryBinaryEncoder() throws IOException {
webPageStore.setCodecType(CodecType.BINARY);
webPageStore.setInputPath(webPageStore.getOutputPath());
createWebPageData(webPageStore);
webPageStore.close();
testQueryWebPages(webPageStore);
}
//AvroStore should be closed so that Hadoop file is completely flushed,
//so below test is copied and modified to close the store after pushing data
public static void testQueryWebPages(DataStore<String, WebPage> store)
throws IOException {
Query<String, WebPage> query = store.newQuery();
Result<String, WebPage> result = query.execute();
int i=0;
while(result.next()) {
WebPage page = result.get();
DataStoreTestUtil.assertWebPage(page, URL_INDEXES.get(page.getUrl().toString()));
i++;
}
Assert.assertEquals(i, URLS.length);
}
}