| /** |
| * 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.entity; |
| |
| import org.apache.falcon.entity.v0.EntityType; |
| import org.apache.falcon.entity.v0.Frequency; |
| import org.apache.falcon.entity.v0.SchemaHelper; |
| import org.apache.falcon.entity.v0.feed.Feed; |
| import org.apache.falcon.entity.v0.process.Cluster; |
| import org.apache.falcon.entity.v0.process.Process; |
| import org.testng.Assert; |
| import org.testng.annotations.Test; |
| |
| import java.text.DateFormat; |
| import java.text.SimpleDateFormat; |
| import java.util.Date; |
| import java.util.TimeZone; |
| |
| /** |
| * Test for validating Entity util helper methods. |
| */ |
| public class EntityUtilTest extends AbstractTestBase { |
| private static TimeZone tz = TimeZone.getTimeZone("UTC"); |
| |
| @Test |
| public void testProcessView() throws Exception { |
| Process process = (Process) EntityType.PROCESS.getUnmarshaller().unmarshal( |
| getClass().getResourceAsStream(PROCESS_XML)); |
| Cluster cluster = new Cluster(); |
| cluster.setName("newCluster"); |
| cluster.setValidity(process.getClusters().getClusters().get(0).getValidity()); |
| process.getClusters().getClusters().add(cluster); |
| Assert.assertEquals(process.getClusters().getClusters().size(), 2); |
| String currentCluster = process.getClusters().getClusters().get(0).getName(); |
| Process newProcess = EntityUtil.getClusterView(process, currentCluster); |
| Assert.assertFalse(EntityUtil.equals(process, newProcess)); |
| Assert.assertEquals(newProcess.getClusters().getClusters().size(), 1); |
| Assert.assertEquals(newProcess.getClusters().getClusters().get(0).getName(), currentCluster); |
| } |
| |
| @Test |
| public void testFeedView() throws Exception { |
| Feed feed = (Feed) EntityType.FEED.getUnmarshaller().unmarshal( |
| getClass().getResourceAsStream(FEED_XML)); |
| Feed view = EntityUtil.getClusterView(feed, "testCluster"); |
| Assert.assertEquals(view.getClusters().getClusters().size(), 1); |
| Assert.assertEquals(view.getClusters().getClusters().get(0).getName(), "testCluster"); |
| |
| view = EntityUtil.getClusterView(feed, "backupCluster"); |
| Assert.assertEquals(view.getClusters().getClusters().size(), 2); |
| } |
| |
| @Test |
| public void testEquals() throws Exception { |
| Process process1 = (Process) EntityType.PROCESS.getUnmarshaller().unmarshal( |
| getClass().getResourceAsStream(PROCESS_XML)); |
| Process process2 = (Process) EntityType.PROCESS.getUnmarshaller().unmarshal( |
| getClass().getResourceAsStream(PROCESS_XML)); |
| Assert.assertTrue(EntityUtil.equals(process1, process2)); |
| Assert.assertTrue(EntityUtil.md5(process1).equals(EntityUtil.md5(process2))); |
| |
| process2.getClusters().getClusters().get(0).getValidity().setEnd( |
| SchemaHelper.parseDateUTC("2013-04-21T00:00Z")); |
| Assert.assertFalse(EntityUtil.equals(process1, process2)); |
| Assert.assertFalse(EntityUtil.md5(process1).equals(EntityUtil.md5(process2))); |
| Assert.assertTrue(EntityUtil.equals(process1, process2, new String[]{"clusters.clusters[\\d+].validity.end"})); |
| } |
| |
| private static Date getDate(String date) throws Exception { |
| DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm Z"); |
| return format.parse(date); |
| } |
| |
| @Test |
| public void testGetNextStartTime() throws Exception { |
| Date now = getDate("2012-04-03 02:45 UTC"); |
| Date start = getDate("2012-04-02 03:00 UTC"); |
| Date newStart = getDate("2012-04-03 03:00 UTC"); |
| |
| Frequency frequency = new Frequency("hours(1)"); |
| Assert.assertEquals(newStart, EntityUtil.getNextStartTime(start, |
| frequency, tz, now)); |
| } |
| |
| @Test |
| public void testgetNextStartTimeOld() throws Exception { |
| Date now = getDate("2012-05-02 02:45 UTC"); |
| Date start = getDate("2012-02-01 03:00 UTC"); |
| Date newStart = getDate("2012-05-02 03:00 UTC"); |
| |
| Frequency frequency = new Frequency("days(7)"); |
| Assert.assertEquals(newStart, EntityUtil.getNextStartTime(start, |
| frequency, tz, now)); |
| } |
| |
| @Test |
| public void testGetNextStartTime2() throws Exception { |
| Date now = getDate("2010-05-02 04:45 UTC"); |
| Date start = getDate("2010-02-01 03:00 UTC"); |
| Date newStart = getDate("2010-05-03 03:00 UTC"); |
| |
| Frequency frequency = new Frequency("days(7)"); |
| Assert.assertEquals(newStart, EntityUtil.getNextStartTime(start, |
| frequency, tz, now)); |
| } |
| |
| @Test |
| public void testGetNextStartTime3() throws Exception { |
| Date now = getDate("2010-05-02 04:45 UTC"); |
| Date start = getDate("1980-02-01 03:00 UTC"); |
| Date newStart = getDate("2010-05-07 03:00 UTC"); |
| |
| Frequency frequency = new Frequency("days(7)"); |
| Assert.assertEquals(newStart, EntityUtil.getNextStartTime(start, |
| frequency, tz, now)); |
| } |
| |
| |
| @Test |
| public void testGetInstanceSequence() throws Exception { |
| Date instance = getDate("2012-05-22 13:40 UTC"); |
| Date start = getDate("2012-05-14 07:40 UTC"); |
| |
| Frequency frequency = new Frequency("hours(1)"); |
| Assert.assertEquals(199, EntityUtil.getInstanceSequence(start, |
| frequency, tz, instance)); |
| } |
| |
| @Test |
| public void testGetInstanceSequence1() throws Exception { |
| Date instance = getDate("2012-05-22 12:40 UTC"); |
| Date start = getDate("2012-05-14 07:40 UTC"); |
| |
| Frequency frequency = Frequency.fromString("hours(1)"); |
| Assert.assertEquals(198, EntityUtil.getInstanceSequence(start, |
| frequency, tz, instance)); |
| } |
| |
| @Test |
| public void testGetInstanceSequence2() throws Exception { |
| Date instance = getDate("2012-05-22 12:41 UTC"); |
| Date start = getDate("2012-05-14 07:40 UTC"); |
| |
| Frequency frequency = Frequency.fromString("hours(1)"); |
| Assert.assertEquals(199, EntityUtil.getInstanceSequence(start, |
| frequency, tz, instance)); |
| } |
| |
| @Test |
| public void testGetInstanceSequence3() throws Exception { |
| Date instance = getDate("2010-01-02 01:01 UTC"); |
| Date start = getDate("2010-01-02 01:00 UTC"); |
| |
| Frequency frequency = Frequency.fromString("minutes(1)"); |
| Assert.assertEquals(2, EntityUtil.getInstanceSequence(start, |
| frequency, tz, instance)); |
| } |
| |
| @Test |
| public void testGetInstanceSequence4() throws Exception { |
| Date instance = getDate("2010-01-01 01:03 UTC"); |
| Date start = getDate("2010-01-01 01:01 UTC"); |
| |
| Frequency frequency = Frequency.fromString("minutes(2)"); |
| Assert.assertEquals(2, EntityUtil.getInstanceSequence(start, |
| frequency, tz, instance)); |
| } |
| |
| @Test |
| public void testGetInstanceSequence5() throws Exception { |
| Date instance = getDate("2010-01-01 02:01 UTC"); |
| Date start = getDate("2010-01-01 01:01 UTC"); |
| |
| Frequency frequency = Frequency.fromString("hours(1)"); |
| Assert.assertEquals(2, EntityUtil.getInstanceSequence(start, |
| frequency, tz, instance)); |
| } |
| |
| @Test |
| public void testGetInstanceSequence6() throws Exception { |
| Date instance = getDate("2010-01-01 01:04 UTC"); |
| Date start = getDate("2010-01-01 01:01 UTC"); |
| |
| Frequency frequency = Frequency.fromString("minutes(3)"); |
| Assert.assertEquals(2, EntityUtil.getInstanceSequence(start, |
| frequency, tz, instance)); |
| } |
| |
| @Test |
| public void testGetInstanceSequence7() throws Exception { |
| Date instance = getDate("2010-01-01 01:03 UTC"); |
| Date start = getDate("2010-01-01 01:01 UTC"); |
| |
| Frequency frequency = Frequency.fromString("minutes(1)"); |
| Assert.assertEquals(3, EntityUtil.getInstanceSequence(start, |
| frequency, tz, instance)); |
| } |
| |
| } |