// Path: src/main/java/edu/sjsu/mithai/util/BaseTest.java
// public abstract class BaseTest {
// 
//     protected Configuration config;
// 
//     public BaseTest() throws IOException {
//         loadConfig();
//     }
// 
//     public abstract void test() throws Exception;
// 
//     public void loadConfig() throws IOException {
//         config = new Configuration(getClass().getClassLoader().getResource("application.properties").getFile());
//     }
// 
//     public void stopAfter(int seconds) {
// 
//         try {
//             Thread.sleep(seconds * 1000);
//         } catch (InterruptedException e) {
//             e.printStackTrace();
//         }
// 
//         try {
//             TaskManager.getInstance().stopAll();
//         } catch (InterruptedException e) {
//             e.printStackTrace();
//         }
// 
//     }
// }
// 
// Path: src/main/java/edu/sjsu/mithai/util/TaskManager.java
// public class TaskManager {
//     private static TaskManager ourInstance = new TaskManager();
// 
//     private List<Stoppable> tasks;
//     private ExecutorService threadPool;
//     private List<Ihandler> handlers;
// 
//     private TaskManager() {
//         this.threadPool = Executors.newCachedThreadPool();
//         this.tasks = new ArrayList<>();
//         this.handlers = new ArrayList<>();
//     }
// 
//     public static TaskManager getInstance() {
//         return ourInstance;
//     }
// 
//     public synchronized void submitTask(StoppableExecutableTask task) {
//         threadPool.submit(task);
//         tasks.add(task);
//     }
// 
//     public synchronized void submitTask(StoppableRunnableTask task) {
//         threadPool.submit(task);
//         tasks.add(task);
//     }
// 
//     public synchronized void stopAll() throws InterruptedException {
// 
//         for (Stoppable task : tasks) {
//             System.out.println("Stopping task:" + task);
//             task.stop();
//             System.out.println("Task stopped..");
//         }
// 
//         // remove all tasks
//         tasks.clear();
// 
//         threadPool.shutdown();
//         System.out.println("Stopping streaming context..");
//         SparkStreamingObject.streamingContext().stop(true, false);
//         System.out.println("Streaming context stopped..");
//         threadPool.awaitTermination(60, TimeUnit.SECONDS);
//     }
// 
//     public synchronized void stop(Class clazz) {
//         System.out.println(tasks);
//         for(Stoppable task : tasks) {
//             if (clazz.isInstance(task)) {
//                 task.stop();
//             }
//         }
//     }
// 
//     public List<Ihandler> getHandlers() {
//         return handlers;
//     }
// 
//     public void addHandler(Ihandler handler) {
//         handlers.add(handler);
//     }
// }


import edu.sjsu.mithai.util.BaseTest;
import edu.sjsu.mithai.util.TaskManager;
import org.junit.Test;
import java.io.IOException;
package edu.sjsu.mithai.config;



public class ConfigurationTest extends BaseTest {


    public ConfigurationTest() throws IOException {

    }

    @Test
    public void test() {
        // start monitor task
// Path: src/main/java/edu/sjsu/mithai/util/BaseTest.java
// public abstract class BaseTest {
// 
//     protected Configuration config;
// 
//     public BaseTest() throws IOException {
//         loadConfig();
//     }
// 
//     public abstract void test() throws Exception;
// 
//     public void loadConfig() throws IOException {
//         config = new Configuration(getClass().getClassLoader().getResource("application.properties").getFile());
//     }
// 
//     public void stopAfter(int seconds) {
// 
//         try {
//             Thread.sleep(seconds * 1000);
//         } catch (InterruptedException e) {
//             e.printStackTrace();
//         }
// 
//         try {
//             TaskManager.getInstance().stopAll();
//         } catch (InterruptedException e) {
//             e.printStackTrace();
//         }
// 
//     }
// }
// 
// Path: src/main/java/edu/sjsu/mithai/util/TaskManager.java
// public class TaskManager {
//     private static TaskManager ourInstance = new TaskManager();
// 
//     private List<Stoppable> tasks;
//     private ExecutorService threadPool;
//     private List<Ihandler> handlers;
// 
//     private TaskManager() {
//         this.threadPool = Executors.newCachedThreadPool();
//         this.tasks = new ArrayList<>();
//         this.handlers = new ArrayList<>();
//     }
// 
//     public static TaskManager getInstance() {
//         return ourInstance;
//     }
// 
//     public synchronized void submitTask(StoppableExecutableTask task) {
//         threadPool.submit(task);
//         tasks.add(task);
//     }
// 
//     public synchronized void submitTask(StoppableRunnableTask task) {
//         threadPool.submit(task);
//         tasks.add(task);
//     }
// 
//     public synchronized void stopAll() throws InterruptedException {
// 
//         for (Stoppable task : tasks) {
//             System.out.println("Stopping task:" + task);
//             task.stop();
//             System.out.println("Task stopped..");
//         }
// 
//         // remove all tasks
//         tasks.clear();
// 
//         threadPool.shutdown();
//         System.out.println("Stopping streaming context..");
//         SparkStreamingObject.streamingContext().stop(true, false);
//         System.out.println("Streaming context stopped..");
//         threadPool.awaitTermination(60, TimeUnit.SECONDS);
//     }
// 
//     public synchronized void stop(Class clazz) {
//         System.out.println(tasks);
//         for(Stoppable task : tasks) {
//             if (clazz.isInstance(task)) {
//                 task.stop();
//             }
//         }
//     }
// 
//     public List<Ihandler> getHandlers() {
//         return handlers;
//     }
// 
//     public void addHandler(Ihandler handler) {
//         handlers.add(handler);
//     }
// }


// Path: src/test/java/edu/sjsu/mithai/config/ConfigurationTest.java
import edu.sjsu.mithai.util.BaseTest;
import edu.sjsu.mithai.util.TaskManager;
import org.junit.Test;
import java.io.IOException;

package edu.sjsu.mithai.config;



public class ConfigurationTest extends BaseTest {


    public ConfigurationTest() throws IOException {

    }

    @Test
    public void test() {
        // start monitor task
        TaskManager.getInstance().submitTask(new ConfigMonitorTask(config));