// Copyright 2011 Google Inc. // // 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. package com.google.appengine.tools.pipeline; import static com.google.appengine.tools.pipeline.impl.util.GUIDGenerator.USE_SIMPLE_GUIDS_FOR_DEBUGGING; import com.google.appengine.api.datastore.Entity; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.KeyFactory; import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; import com.google.appengine.tools.pipeline.impl.QueueSettings; import com.google.appengine.tools.pipeline.impl.model.FanoutTaskRecord; import com.google.appengine.tools.pipeline.impl.model.JobRecord; import com.google.appengine.tools.pipeline.impl.model.Slot; import com.google.appengine.tools.pipeline.impl.tasks.FanoutTask; import com.google.appengine.tools.pipeline.impl.tasks.FinalizeJobTask; import com.google.appengine.tools.pipeline.impl.tasks.HandleSlotFilledTask; import com.google.appengine.tools.pipeline.impl.tasks.RunJobTask; import com.google.appengine.tools.pipeline.impl.tasks.Task; import com.google.common.collect.ImmutableList; import junit.framework.TestCase; import java.util.List; /** * @author rudominer@google.com (Mitch Rudominer) */ public class FanoutTaskTest extends TestCase { private LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()); private List<? extends Task> listOfTasks; byte[] encodedBytes; private QueueSettings queueSettings1 = new QueueSettings(); private QueueSettings queueSettings2 = new QueueSettings().setOnQueue("queue1"); @Override public void setUp() throws Exception { super.setUp(); helper.setUp(); System.setProperty(USE_SIMPLE_GUIDS_FOR_DEBUGGING, "true"); Key key = KeyFactory.createKey(JobRecord.DATA_STORE_KIND, "job1"); RunJobTask runJobTask = new RunJobTask(key, queueSettings1); key = KeyFactory.createKey(JobRecord.DATA_STORE_KIND, "job2"); RunJobTask runJobTask2 = new RunJobTask(key, queueSettings2); key = KeyFactory.createKey(JobRecord.DATA_STORE_KIND, "job3"); FinalizeJobTask finalizeJobTask = new FinalizeJobTask(key, queueSettings1); key = KeyFactory.createKey(Slot.DATA_STORE_KIND, "slot1"); HandleSlotFilledTask hsfTask = new HandleSlotFilledTask(key, queueSettings2); listOfTasks = ImmutableList.of(runJobTask, runJobTask2, finalizeJobTask, hsfTask); encodedBytes = FanoutTask.encodeTasks(listOfTasks); } @Override public void tearDown() throws Exception { helper.tearDown(); super.tearDown(); } /** * Tests the methods {@link FanoutTask#encodeTasks(java.util.Collection)} and * {@link FanoutTask#decodeTasks(byte[])} */ public void testEncodeDecode() throws Exception { checkBytes(encodedBytes); } /** * Tests conversion of {@link FanoutTaskRecord} to and from an {@link Entity} */ public void testFanoutTaskRecord() throws Exception { Key rootJobKey = KeyFactory.createKey("dummy", "dummy"); FanoutTaskRecord record = new FanoutTaskRecord(rootJobKey, encodedBytes); Entity entity = record.toEntity(); // reconstitute entity record = new FanoutTaskRecord(entity); checkBytes(record.getPayload()); } private void checkBytes(byte[] bytes) { List<Task> reconstituted = FanoutTask.decodeTasks(bytes); assertEquals(listOfTasks.size(), reconstituted.size()); for (int i = 0; i < listOfTasks.size(); i++) { Task expected = listOfTasks.get(i); Task actual = reconstituted.get(i); assertEquals(i, expected, actual); } } private void assertEquals(int i, Task expected, Task actual) { assertEquals("i=" + i, expected.getType(), actual.getType()); assertEquals("i=" + i, expected.toProperties(), actual.toProperties()); } }