/*
* All content copyright Terracotta, Inc., unless otherwise indicated. All rights reserved.
*
* 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 org.terracotta.quartz.tests;
import org.quartz.Scheduler;
import org.quartz.impl.JobDetailImpl;
import org.quartz.impl.triggers.SimpleTriggerImpl;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
import java.net.Socket;
import java.util.Date;
public class LiveNodeClient2 extends ClientBase {
private final int node1Port;
public LiveNodeClient2(String[] args) {
super(args);
this.node1Port = Integer.parseInt(System.getProperty("listenPort"));
}
@Override
protected void test(Scheduler scheduler) throws Throwable {
JobDetailImpl jobDetail = new JobDetailImpl("futurejob", null, NullJob.class);
jobDetail.setDurability(true);
SimpleTriggerImpl trigger = new SimpleTriggerImpl("futuretrigger", "group");
// run a week from now (ie. don't run)
trigger.setStartTime(new Date(System.currentTimeMillis() + (1000L * 60L * 60L * 24L * 7L)));
trigger.setJobName("futurejob");
scheduler.addJob(jobDetail, false);
scheduler.scheduleJob(trigger);
// not strictly necessary but this should make the newly added trigger get ACQUIRED locally
Thread.sleep(5000L);
Socket s;
// make this loop forever in case a hang in the first client prevents the listener from ever starting. This loop
// should make the test timeout and thus we'll get a thread dump
while (true) {
try {
s = new Socket("127.0.0.1", node1Port);
break;
} catch (ConnectException ce) {
Thread.sleep(1000L);
}
}
InputStream in = s.getInputStream();
final long end = System.currentTimeMillis() + 60000L;
while (System.currentTimeMillis() < end) {
log("Sleeping");
Thread.sleep(1000L);
try {
if (in.read() < 0) {
break;
}
} catch (IOException ioe) {
break;
}
}
if (System.currentTimeMillis() > end) { throw new AssertionError(); }
SimpleJob.localBarrier.await();
}
private void log(String msg) {
System.err.println("[" + new Date() + "] " + msg);
}
}