/*
* 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.usergrid.batch.job;
import java.util.UUID;
import org.junit.Ignore;
import org.junit.Test;
import org.apache.usergrid.persistence.Results;
import org.apache.usergrid.persistence.entities.JobData;
import org.apache.usergrid.persistence.Query;
import org.apache.usergrid.utils.UUIDUtils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
/**
* Class to test job runtimes
*/
@Ignore("Pending https://issues.apache.org/jira/browse/USERGRID-1105. Spring problems." )
// These tests no longer work with shared Spring context, need to be fixed
public class SchedulerRuntime8IT extends AbstractSchedulerRuntimeIT {
/**
* Test the scheduler ramps up correctly when there are more jobs to be read after a pause
* when the job specifies the retry time
*/
@Test
public void queryAndDeleteJobs() throws Exception {
CountdownLatchJob job = springResource.getBean( "countdownLatch", CountdownLatchJob.class );
job.setLatch( 1 );
// fire the job 30 seconds from now
long fireTime = System.currentTimeMillis() + 30000;
UUID notificationId = UUIDUtils.newTimeUUID();
JobData test = new JobData();
test.setProperty( "stringprop", "test" );
test.setProperty( "notificationId", notificationId );
getJobListener().setExpected( 1 );
JobData saved = scheduler.createJob( "countdownLatch", fireTime, test );
scheduler.refreshIndex();
// now query and make sure it equals the saved value
Query query = Query.fromQL( "notificationId = " + notificationId );
Results r = scheduler.queryJobData( query );
assertEquals( 1, r.size() );
assertEquals( saved.getUuid(), r.getEntity().getUuid() );
// query by uuid
query = Query.fromQL( "stringprop = 'test'" );
r = scheduler.queryJobData( query );
assertEquals( 1, r.size() );
assertEquals( saved.getUuid(), r.getEntity().getUuid() );
// now delete the job
scheduler.deleteJob( saved.getUuid() );
scheduler.refreshIndex();
// sleep until the job should have failed. We sleep 1 extra cycle just to
// make sure we're not racing the test
long waitTime = Math.max( 0, fireTime - System.currentTimeMillis() + 1000 );
boolean waited = getJobListener().blockTilDone( waitTime );
assertFalse( "Job ran ", waited );
}
}