/* * 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.zeppelin.interpreter; import static org.junit.Assert.*; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.junit.After; import org.junit.Before; import org.junit.Test; public class InterpreterOutputChangeWatcherTest implements InterpreterOutputChangeListener { private File tmpDir; private File fileChanged; private int numChanged; private InterpreterOutputChangeWatcher watcher; @Before public void setUp() throws Exception { watcher = new InterpreterOutputChangeWatcher(this); watcher.start(); tmpDir = new File(System.getProperty("java.io.tmpdir")+"/ZeppelinLTest_"+System.currentTimeMillis()); tmpDir.mkdirs(); fileChanged = null; numChanged = 0; } @After public void tearDown() throws Exception { watcher.shutdown(); delete(tmpDir); } private void delete(File file){ if(file.isFile()) file.delete(); else if(file.isDirectory()){ File [] files = file.listFiles(); if(files!=null && files.length>0){ for(File f : files){ delete(f); } } file.delete(); } } @Test public void test() throws IOException, InterruptedException { assertNull(fileChanged); assertEquals(0, numChanged); Thread.sleep(1000); // create new file File file1 = new File(tmpDir, "test1"); file1.createNewFile(); File file2 = new File(tmpDir, "test2"); file2.createNewFile(); watcher.watch(file1); Thread.sleep(1000); FileOutputStream out1 = new FileOutputStream(file1); out1.write(1); out1.close(); FileOutputStream out2 = new FileOutputStream(file2); out2.write(1); out2.close(); synchronized (this) { wait(30*1000); } assertNotNull(fileChanged); assertEquals(1, numChanged); } @Override public void fileChanged(File file) { fileChanged = file; numChanged++; synchronized(this) { notify(); } } }