blob: be5f35ca52f7420c8ed84408909f3580b73d798f [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.oozie.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.zip.GZIPOutputStream;
import org.apache.oozie.test.XTestCase;
import org.apache.oozie.util.XLogStreamer;
public class TestLogStreamer extends XTestCase {
public void testStreamLog() throws IOException {
long currTime = System.currentTimeMillis();
XLogStreamer.Filter.reset();
XLogStreamer.Filter.defineParameter("USER");
XLogStreamer.Filter.defineParameter("GROUP");
XLogStreamer.Filter.defineParameter("TOKEN");
XLogStreamer.Filter.defineParameter("APP");
XLogStreamer.Filter.defineParameter("JOB");
XLogStreamer.Filter.defineParameter("ACTION");
XLogStreamer.Filter xf = new XLogStreamer.Filter();
xf.setParameter("JOB", "14-200904160239--example-forkjoinwf");
xf.setLogLevel("DEBUG|INFO");
FileWriter fw1 = new FileWriter(getTestCaseDir() + "/oozie.log");
StringBuilder sb1 = new StringBuilder();
sb1.append("2009-06-24 02:43:13,958 DEBUG _L1_:323 - USER[oozie] GROUP[-] TOKEN[-] APP[example-forkjoinwf] "
+ "JOB[14-200904160239--example-forkjoinwf] ACTION[-] End workflow state change");
sb1.append("\n2009-06-24 02:43:13,961 INFO _L2_:317 - USER[-] GROUP[-] TOKEN[-] " + "APP[example-forkjoinwf] "
+ "JOB[14-200904160239--example-forkjoinwf] ACTION[-] "
+ "[org.apache.oozie.core.command.WorkflowRunnerCallable] " + "released lock");
fw1.write(sb1.toString());
fw1.close();
File f1 = new File(getTestCaseDir() + "/oozie.log");
f1.setLastModified(currTime - 9000);
FileWriter fw2 = new FileWriter(getTestCaseDir() + "/oozie.log.1");
StringBuilder sb2 = new StringBuilder();
sb2.append("\n2009-06-24 02:43:13,986 WARN _L3_:539 - USER[-] GROUP[-] TOKEN[-] APP[example-forkjoinwf] "
+ "JOB[14-200904160239--example-forkjoinwf] ACTION[-] Use GenericOptionsParser for parsing " + "the "
+ "arguments. " + "\n" + "_L3A_Applications "
+ "should implement Tool for the same. \n_L3B_Multi line test");
sb2.append("\n2009-06-24 02:43:14,431 INFO _L4_:661 - USER[-] GROUP[-] TOKEN[-] APP[example-forkjoinwf] "
+ "JOB[14-200904160239--example-forkjoinwf] ACTION[-] No job jar file set. User classes "
+ "may not be found. " + "See JobConf(Class) or JobConf#setJar(String).");
fw2.write(sb2.toString());
fw2.close();
File f2 = new File(getTestCaseDir() + "/oozie.log.1");
f2.setLastModified(currTime - 8000);
FileWriter fw3 = new FileWriter(getTestCaseDir() + "/oozie.log.2");
StringBuilder sb3 = new StringBuilder();
sb3.append("\n2009-06-24 02:43:14,505 INFO _L5_:317 - USER[oozie] GROUP[oozie] TOKEN[-] APP[-] JOB[-] "
+ "ACTION[-] Released Lock");
sb3.append("\n2009-06-24 02:43:19,344 DEBUG _L6_:323 - USER[oozie] GROUP[oozie] TOKEN[MYtoken] APP[-] JOB[-] "
+ "ACTION[-] Number of pending signals to check [0]");
sb3.append("\n2009-06-24 02:43:29,151 DEBUG _L7_:323 - USER[-] GROUP[-] TOKEN[-] APP[-] "
+ "JOB[14-200904160239--example-forkjoinwf] ACTION[-] Number of pending actions [0] ");
fw3.write(sb3.toString());
fw3.close();
File f3 = new File(getTestCaseDir() + "/oozie.log.2");
f3.setLastModified(currTime);
FileWriter fwerr = new FileWriter(getTestCaseDir() + "/testerr.log");
StringBuilder sberr = new StringBuilder();
sberr.append("2009-06-24 02:43:13,958 WARN _L1_:323 - USER[oozie] GROUP[-] TOKEN[-] APP[example-forkjoinwf] "
+ "JOB[14-200904160239--example-forkjoinwf] ACTION[-] End workflow state change");
sberr.append("\n2009-06-24 02:43:13,961 INFO _L2_:317 - USER[-] GROUP[-] TOKEN[-] APP[example-forkjoinwf] "
+ "JOB[14-200904160239--example-forkjoinwf] ACTION[-] "
+ "[org.apache.oozie.core.command.WorkflowRunnerCallable] " + "released lock");
fwerr.write(sberr.toString());
fwerr.close();
File ferr = new File(getTestCaseDir() + "/testerr.log");
ferr.setLastModified(currTime - 8000);
Calendar cal = new GregorianCalendar();
String outFilename = "oozie.log." + cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-"
+ cal.get(Calendar.DATE) + "-" + cal.get(Calendar.HOUR_OF_DAY) + ".gz";
File f = new File(getTestCaseDir() + "/" + outFilename);
GZIPOutputStream gzout = new GZIPOutputStream(new FileOutputStream(f));
StringBuilder sb = new StringBuilder();
sb.append("\n2009-06-24 02:43:13,958 DEBUG _L8_:323 - USER[oozie] GROUP[-] TOKEN[-] APP[example-"
+ "forkjoinwf] " + "JOB[14-200904160239--example-forkjoinwf] ACTION[-] End workflow state change");
sb.append("\n2009-06-24 02:43:13,961 INFO _L9_:317 - USER[-] GROUP[-] TOKEN[-] APP[example-forkjoinwf] "
+ "JOB[14-200904160239--example-forkjoinwf] ACTION[-] [org.apache.oozie.core."
+ "command.WorkflowRunnerCallable] " + "released lock");
String strg = sb.toString();
byte[] buf = strg.getBytes();
gzout.write(buf, 0, buf.length);
gzout.finish();
gzout.close();
StringWriter sw = new StringWriter();
XLogStreamer str = new XLogStreamer(xf, sw, getTestCaseDir(), "oozie.log", 1);
str.streamLog(new Date(currTime - 10000), new Date(currTime - 5000));
String[] out = sw.toString().split("\n");
assertEquals(5, out.length);
assertEquals(true, out[0].contains("_L8_"));
assertEquals(true, out[1].contains("_L9_"));
assertEquals(true, out[2].contains("_L1_"));
assertEquals(true, out[3].contains("_L2_"));
assertEquals(true, out[4].contains("_L4_"));
StringWriter sw1 = new StringWriter();
XLogStreamer str1 = new XLogStreamer(xf, sw1, getTestCaseDir(), "oozie.log", 1);
str1.streamLog(null, null);
out = sw1.toString().split("\n");
assertEquals(6, out.length);
assertEquals(true, out[0].contains("_L8_"));
assertEquals(true, out[1].contains("_L9_"));
assertEquals(true, out[2].contains("_L1_"));
assertEquals(true, out[3].contains("_L2_"));
assertEquals(true, out[4].contains("_L4_"));
assertEquals(true, out[5].contains("_L7_"));
}
}