package com.thinkbiganalytics.controller.metadata; /*- * #%L * thinkbig-nifi-core-service * %% * Copyright (C) 2017 ThinkBig Analytics * %% * 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. * #L% */ import com.thinkbiganalytics.metadata.api.sla.DatasourceUpdatedSinceFeedExecuted; import com.thinkbiganalytics.metadata.api.sla.DatasourceUpdatedSinceSchedule; import com.thinkbiganalytics.metadata.api.sla.FeedExecutedSinceFeed; import com.thinkbiganalytics.metadata.api.sla.FeedExecutedSinceSchedule; import com.thinkbiganalytics.metadata.rest.model.data.Datasource; import com.thinkbiganalytics.metadata.rest.model.data.DirectoryDatasource; import com.thinkbiganalytics.metadata.rest.model.data.HiveTableDatasource; import com.thinkbiganalytics.metadata.rest.model.feed.Feed; import com.thinkbiganalytics.metadata.rest.model.feed.FeedDestination; import com.thinkbiganalytics.metadata.rest.model.op.DataOperation; import com.thinkbiganalytics.metadata.rest.model.op.DataOperation.State; import com.thinkbiganalytics.metadata.rest.model.op.Dataset; import com.thinkbiganalytics.nifi.v2.core.metadata.MetadataClientProvider; import org.joda.time.DateTime; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import java.nio.file.Paths; import java.text.ParseException; import static org.assertj.core.api.Assertions.assertThat; @Ignore // TODO Requires the metadata server running. Add support for embedded test server. public class MetadataClientProviderTest { private MetadataClientProvider provider; @Before public void setUp() throws Exception { this.provider = new MetadataClientProvider(); } @Test public void testEnsureFeed() { Feed feed = this.provider.ensureFeed("category", "test1", ""); assertThat(feed).isNotNull(); String feedId = feed.getId(); feed = this.provider.ensureFeed("category", "test1", ""); assertThat(feed).isNotNull(); assertThat(feed.getId()).isEqualTo(feedId); } @Test public void testGetDatasourceByName() { this.provider.ensureDirectoryDatasource("test2", "", Paths.get("aaa", "bbb")); Datasource ds = this.provider.getDatasourceByName("test2"); assertThat(ds).isNotNull(); } @Test public void testEnsureFeedSource() { Feed feed = this.provider.ensureFeed("category", "test3", ""); Datasource ds = this.provider.ensureDirectoryDatasource("test3", "", Paths.get("aaa", "bbb")); feed = this.provider.ensureFeedSource(feed.getId(), ds.getId()); assertThat(feed.getSources()).hasSize(1); feed = this.provider.ensureFeedSource(feed.getId(), ds.getId()); assertThat(feed.getSources()).hasSize(1); } @Test public void testEnsureFeedDestination() { Feed feed = this.provider.ensureFeed("category", "test4", ""); Datasource ds = this.provider.ensureDirectoryDatasource("test4", "", Paths.get("aaa", "bbb")); feed = this.provider.ensureFeedDestination(feed.getId(), ds.getId()); assertThat(feed.getDestinations()).hasSize(1); feed = this.provider.ensureFeedDestination(feed.getId(), ds.getId()); assertThat(feed.getDestinations()).hasSize(1); } @Test public void testEnsurePrecondition() { Feed feed = this.provider.ensureFeed("category", "test5", ""); try { feed = this.provider.ensurePrecondition(feed.getId(), new DatasourceUpdatedSinceFeedExecuted("ds5", "test5"), new DatasourceUpdatedSinceSchedule("ds5", "0 0 6 * * ? *"), new FeedExecutedSinceFeed("category", "dep5", "category", "test5"), new FeedExecutedSinceSchedule("category", "test5", "0 0 6 * * ? *"), new com.thinkbiganalytics.metadata.api.sla.WithinSchedule("0 0 6 * * ? *", "2 hours")); } catch (ParseException e) { e.printStackTrace(); ; } assertThat(feed).isNotNull(); } @Test public void testEnsureDirectoryDatasource() { this.provider.ensureDirectoryDatasource("test6", "", Paths.get("aaa", "bbb")); Datasource ds = this.provider.getDatasourceByName("test6"); assertThat(ds).isNotNull(); assertThat(ds).isInstanceOf(DirectoryDatasource.class); String dsId = ds.getId(); DirectoryDatasource dds = (DirectoryDatasource) ds; assertThat(dds.getPath()).contains("aaa/bbb"); ds = this.provider.ensureDirectoryDatasource("test6", "", Paths.get("aaa", "bbb")); assertThat(ds).isNotNull(); assertThat(ds.getId()).isEqualTo(dsId); } @Test public void testEnsureHiveTableDatasource() { this.provider.ensureHiveTableDatasource("test7", "", "testdb", "test_table"); Datasource ds = this.provider.getDatasourceByName("test7"); assertThat(ds).isNotNull(); assertThat(ds).isInstanceOf(HiveTableDatasource.class); String dsId = ds.getId(); HiveTableDatasource dds = (HiveTableDatasource) ds; assertThat(dds.getTableName()).contains("test_table"); ds = this.provider.ensureHiveTableDatasource("test7", "", "testdb", "test_table"); assertThat(ds).isNotNull(); assertThat(ds.getId()).isEqualTo(dsId); } @Test public void testBeginOperation() { Feed feed = this.provider.ensureFeed("category", "test9", ""); Datasource ds = this.provider.ensureDirectoryDatasource("test9", "", Paths.get("aaa", "bbb")); feed = this.provider.ensureFeedDestination(feed.getId(), ds.getId()); FeedDestination dest = feed.getDestination(ds.getId()); DataOperation op = this.provider.beginOperation(dest, new DateTime()); assertThat(op).isNotNull(); assertThat(op.getState()).isEqualTo(State.IN_PROGRESS); } @Test public void testCompleteOperation() { Feed feed = this.provider.ensureFeed("category", "test10", ""); DirectoryDatasource ds = this.provider.ensureDirectoryDatasource("test10", "", Paths.get("aaa", "bbb")); feed = this.provider.ensureFeedDestination(feed.getId(), ds.getId()); FeedDestination dest = feed.getDestination(ds.getId()); DataOperation op = this.provider.beginOperation(dest, new DateTime()); Dataset set = this.provider.createDataset(ds, Paths.get("a.txt"), Paths.get("b.txt")); op = this.provider.completeOperation(op.getId(), "", set); assertThat(op).isNotNull(); assertThat(op.getState()).isEqualTo(State.SUCCESS); } }