blob: a6c52e30906f61bed63e5726b427c5d0447e7b93 [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.falcon.group;
import org.apache.falcon.FalconException;
import org.apache.falcon.entity.AbstractTestBase;
import org.apache.falcon.entity.v0.EntityType;
import org.apache.falcon.entity.v0.cluster.Cluster;
import org.apache.falcon.entity.v0.feed.Feed;
import org.apache.falcon.entity.v0.feed.Location;
import org.apache.falcon.entity.v0.feed.LocationType;
import org.apache.falcon.entity.v0.feed.Locations;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.xml.bind.JAXBException;
import java.util.Map;
/**
* Feed group map tests.
*/
public class FeedGroupMapTest extends AbstractTestBase {
private static Cluster cluster;
@BeforeClass
public void setUp() throws Exception {
cluster = (Cluster) EntityType.CLUSTER
.getUnmarshaller()
.unmarshal(
FeedGroupMapTest.class
.getResourceAsStream("/config/cluster/cluster-0.1.xml"));
}
@BeforeMethod
public void cleanup() throws Exception {
cleanupStore();
}
@Test
public void testOnAdd() throws FalconException, JAXBException {
getStore().publish(EntityType.CLUSTER, cluster);
Feed feed1 = (Feed) EntityType.FEED.getUnmarshaller().unmarshal(
FeedGroupMapTest.class
.getResourceAsStream("/config/feed/feed-0.1.xml"));
feed1.setName("f1");
feed1.setGroups("group1,group2,group3");
Location location = new Location();
location.setPath("/projects/bi/rmc/daily/ad/${YEAR}/fraud/${MONTH}-${DAY}/ad");
location.setType(LocationType.DATA);
feed1.setLocations(new Locations());
feed1.getLocations().getLocations().add(location);
getStore().publish(EntityType.FEED, feed1);
Map<String, FeedGroup> groupMapping = FeedGroupMap.get()
.getGroupsMapping();
FeedGroup group = groupMapping.get("group1");
Assert.assertEquals(group.getName(), "group1");
Assert.assertEquals(group.getFeeds().size(), 1);
assertFields(group, feed1);
group = groupMapping.get("group2");
Assert.assertEquals(group.getName(), "group2");
Assert.assertEquals(group.getFeeds().size(), 1);
assertFields(group, feed1);
group = groupMapping.get("group3");
Assert.assertEquals(group.getName(), "group3");
Assert.assertEquals(group.getFeeds().size(), 1);
assertFields(group, feed1);
Feed feed2 = (Feed) EntityType.FEED.getUnmarshaller().unmarshal(
FeedGroupMapTest.class
.getResourceAsStream("/config/feed/feed-0.1.xml"));
feed2.setName("f2");
feed2.setGroups("group1,group5,group3");
location.setPath("/projects/bi/rmc/daily/ad/${YEAR}/${MONTH}/${DAY}/ad2");
location.setType(LocationType.DATA);
feed2.setLocations(new Locations());
feed2.getLocations().getLocations().add(location);
getStore().publish(EntityType.FEED, feed2);
groupMapping = FeedGroupMap.get().getGroupsMapping();
group = groupMapping.get("group1");
Assert.assertEquals(group.getName(), "group1");
Assert.assertEquals(group.getFeeds().size(), 2);
assertFields(group, feed2);
group = groupMapping.get("group2");
Assert.assertEquals(group.getName(), "group2");
Assert.assertEquals(group.getFeeds().size(), 1);
assertFields(group, feed2);
group = groupMapping.get("group3");
Assert.assertEquals(group.getName(), "group3");
Assert.assertEquals(group.getFeeds().size(), 2);
assertFields(group, feed2);
group = groupMapping.get("group5");
Assert.assertEquals(group.getName(), "group5");
Assert.assertEquals(group.getFeeds().size(), 1);
assertFields(group, feed2);
}
@Test
public void testOnRemove() throws FalconException, JAXBException {
Feed feed1 = (Feed) EntityType.FEED.getUnmarshaller().unmarshal(
FeedGroupMapTest.class
.getResourceAsStream("/config/feed/feed-0.1.xml"));
feed1.setName("f1");
getStore().publish(EntityType.CLUSTER, cluster);
feed1.setGroups("group7,group8,group9");
Location location = new Location();
location.setPath("/projects/bi/rmc/daily/ad/${YEAR}/fraud/${MONTH}-${DAY}/ad");
location.setType(LocationType.DATA);
feed1.setLocations(new Locations());
feed1.getLocations().getLocations().add(location);
getStore().publish(EntityType.FEED, feed1);
Feed feed2 = (Feed) EntityType.FEED.getUnmarshaller().unmarshal(
FeedGroupMapTest.class
.getResourceAsStream("/config/feed/feed-0.1.xml"));
feed2.setName("f2");
feed2.setGroups("group7,group8,group10");
location.setPath("/projects/bi/rmc/daily/ad/${YEAR}/${MONTH}/${DAY}/ad2");
location.setType(LocationType.DATA);
feed2.setLocations(new Locations());
feed2.getLocations().getLocations().add(location);
getStore().publish(EntityType.FEED, feed2);
Map<String, FeedGroup> groupMapping = FeedGroupMap.get()
.getGroupsMapping();
getStore().remove(EntityType.FEED, "f2");
FeedGroup group = groupMapping.get("group7");
Assert.assertEquals(group.getName(), "group7");
Assert.assertEquals(group.getFeeds().size(), 1);
group = groupMapping.get("group8");
Assert.assertEquals(group.getName(), "group8");
Assert.assertEquals(group.getFeeds().size(), 1);
group = groupMapping.get("group10");
Assert.assertEquals(null, group);
getStore().remove(EntityType.FEED, "f1");
group = groupMapping.get("group7");
Assert.assertEquals(null, group);
group = groupMapping.get("group8");
Assert.assertEquals(null, group);
group = groupMapping.get("group9");
Assert.assertEquals(null, group);
}
@Test
public void testNullGroup() throws FalconException, JAXBException {
Feed feed1 = (Feed) EntityType.FEED.getUnmarshaller().unmarshal(
FeedGroupMapTest.class
.getResourceAsStream("/config/feed/feed-0.1.xml"));
feed1.setName("f5" + System.currentTimeMillis());
getStore().publish(EntityType.CLUSTER, cluster);
feed1.setGroups(null);
Location location = new Location();
location.setPath("/projects/bi/rmc/daily/ad/${YEAR}/fraud/${MONTH}-${DAY}/ad");
location.setType(LocationType.DATA);
feed1.setLocations(new Locations());
feed1.getLocations().getLocations().add(location);
getStore().publish(EntityType.FEED, feed1);
}
private void assertFields(FeedGroup group, Feed feed) {
Assert.assertEquals(group.getFrequency(), feed.getFrequency());
Assert.assertEquals(group.getDatePattern(),
"[${DAY}, ${MONTH}, ${YEAR}]");
}
}