diff --git a/webapp/src/test/java/org/apache/falcon/resource/ExtensionManagerIT.java b/webapp/src/test/java/org/apache/falcon/resource/ExtensionManagerIT.java
index e14bbd8..6efe884 100644
--- a/webapp/src/test/java/org/apache/falcon/resource/ExtensionManagerIT.java
+++ b/webapp/src/test/java/org/apache/falcon/resource/ExtensionManagerIT.java
@@ -58,7 +58,7 @@
         TestContext.deleteEntitiesFromStore();
     }
 
-    @Test
+    @Test (enabled = false)
     public void testTrustedExtensionJob() throws Exception {
         Map<String, String> overlay = context.getUniqueOverlay();
         String endTime = context.getProcessEndTime();
diff --git a/webapp/src/test/java/org/apache/falcon/resource/InstanceSchedulerManagerJerseyIT.java b/webapp/src/test/java/org/apache/falcon/resource/InstanceSchedulerManagerJerseyIT.java
index 2dd5fbe..00dbf7a 100644
--- a/webapp/src/test/java/org/apache/falcon/resource/InstanceSchedulerManagerJerseyIT.java
+++ b/webapp/src/test/java/org/apache/falcon/resource/InstanceSchedulerManagerJerseyIT.java
@@ -41,7 +41,7 @@
         super.setup();
     }
 
-    @Test
+    @Test (enabled = false)
     public void testProcessInstanceExecution() throws Exception {
         UnitTestContext context = new UnitTestContext();
         Map<String, String> overlay = context.getUniqueOverlay();
@@ -65,7 +65,7 @@
 
     }
 
-    @Test
+    @Test (enabled = false)
     public void testKillAndRerunInstances() throws Exception {
         UnitTestContext context = new UnitTestContext();
         Map<String, String> overlay = context.getUniqueOverlay();
@@ -99,7 +99,7 @@
 
     }
 
-    @Test
+    @Test (enabled = false)
     public void testSuspendResumeInstances() throws Exception {
         UnitTestContext context = new UnitTestContext();
         Map<String, String> overlay = context.getUniqueOverlay();
@@ -129,7 +129,7 @@
                 START_INSTANCE, InstancesResult.WorkflowStatus.RUNNING);
     }
 
-    @Test
+    @Test (enabled = false)
     public void testListInstances() throws Exception {
         UnitTestContext context = new UnitTestContext();
         Map<String, String> overlay = context.getUniqueOverlay();
@@ -150,7 +150,7 @@
         Assert.assertEquals(result.getInstances()[2].getInstance(), START_INSTANCE);
     }
 
-    @Test
+    @Test (enabled = false)
     public void testInstanceSummary() throws Exception {
         UnitTestContext context = new UnitTestContext();
         Map<String, String> overlay = context.getUniqueOverlay();
@@ -174,7 +174,7 @@
         Assert.assertEquals(result.getInstancesSummary()[0].getSummaryMap().get("READY").longValue(), 1L);
     }
 
-    @Test
+    @Test (enabled = false)
     public void testProcessWithInputs() throws Exception {
         UnitTestContext context = new UnitTestContext();
         Map<String, String> overlay = context.getUniqueOverlay();
diff --git a/webapp/src/test/java/org/apache/falcon/resource/ProcessInstanceManagerIT.java b/webapp/src/test/java/org/apache/falcon/resource/ProcessInstanceManagerIT.java
index 2e8cd4a..37f8b99 100644
--- a/webapp/src/test/java/org/apache/falcon/resource/ProcessInstanceManagerIT.java
+++ b/webapp/src/test/java/org/apache/falcon/resource/ProcessInstanceManagerIT.java
@@ -72,7 +72,7 @@
         OozieTestUtils.waitForProcessWFtoStart(context);
     }
 
-    //@Test
+    @Test (enabled = false)
     public void testGetRunningInstances() throws Exception {
         TestContext context = new TestContext();
         schedule(context);
@@ -87,7 +87,7 @@
         assertInstance(response.getInstances()[0], START_INSTANCE, WorkflowStatus.RUNNING);
     }
 
-    //@Test
+    @Test (enabled = false)
     public void testGetRunningInstancesPagination()  throws Exception {
         TestContext context = new TestContext();
         schedule(context, 4);
@@ -118,7 +118,7 @@
         Assert.assertEquals(processInstance.getStatus(), status);
     }
 
-    @Test
+    @Test (enabled = false)
     public void testGetInstanceStatus() throws Exception {
         UnitTestContext context = new UnitTestContext();
         schedule(context);
@@ -132,7 +132,7 @@
         Assert.assertEquals(response.getInstances()[0].getStatus(), WorkflowStatus.RUNNING);
     }
 
-    @Test
+    @Test (enabled = false)
     public void testGetInstanceStatusPagination() throws Exception {
         UnitTestContext context = new UnitTestContext();
         schedule(context);
@@ -147,7 +147,7 @@
         Assert.assertEquals(response.getInstances()[0].getStatus(), WorkflowStatus.RUNNING);
     }
 
-    @Test
+    @Test (enabled = false)
     public void testKillInstances() throws Exception {
         UnitTestContext context = new UnitTestContext();
         schedule(context);
@@ -173,7 +173,7 @@
         Assert.assertEquals(response.getInstances()[0].getStatus(), WorkflowStatus.KILLED);
     }
 
-    @Test
+    @Test (enabled = false)
     public void testReRunInstances() throws Exception {
         UnitTestContext context = new UnitTestContext();
         schedule(context);
@@ -202,7 +202,7 @@
         Assert.assertEquals(response.getInstances()[0].getStatus(), WorkflowStatus.RUNNING);
     }
 
-    @Test
+    @Test (enabled = false)
     public void testSuspendInstances() throws Exception {
         UnitTestContext context = new UnitTestContext();
         schedule(context);
@@ -221,7 +221,7 @@
         Assert.assertEquals(response.getInstances()[0].getStatus(), WorkflowStatus.SUSPENDED);
     }
 
-    @Test
+    @Test (enabled = false)
     public void testResumesInstances() throws Exception {
         UnitTestContext context = new UnitTestContext();
         schedule(context);
