You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ab...@apache.org on 2014/12/03 13:01:07 UTC

ambari git commit: AMBARI-8489 - Enable ambari server unit tests on Windows

Repository: ambari
Updated Branches:
  refs/heads/trunk 956a0e708 -> 498a13bab


AMBARI-8489 - Enable ambari server unit tests on Windows


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/498a13ba
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/498a13ba
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/498a13ba

Branch: refs/heads/trunk
Commit: 498a13bab6f38ffa529da1a5cdd7cc400728ca01
Parents: 956a0e7
Author: Artem Baranchuk <ab...@hortonworks.com>
Authored: Mon Dec 1 14:01:50 2014 +0200
Committer: Artem Baranchuk <ab...@hortonworks.com>
Committed: Wed Dec 3 13:54:04 2014 +0200

----------------------------------------------------------------------
 .../ambari/server/bootstrap/BSRunner.java       |  11 +-
 .../server/api/services/AmbariMetaInfoTest.java |  98 ++++++++----
 .../services/ViewSubResourceServiceTest.java    |   2 +-
 .../serializers/JsonSerializerTest.java         |   6 +-
 .../ambari/server/bootstrap/BootStrapTest.java  | 155 ++++++++++---------
 .../ClientConfigResourceProviderTest.java       |  20 ++-
 .../server/orm/InMemoryDefaultTestModule.java   |  21 ++-
 .../server/security/CertGenerationTest.java     |  25 +--
 .../ambari/server/stack/StackManagerTest.java   |  42 ++++-
 .../ambari/server/state/stack/OSFamilyTest.java |   2 +-
 .../ambari/server/view/ViewExtractorTest.java   |  61 ++++++--
 .../ambari/server/view/ViewRegistryTest.java    | 154 +++++++++++++-----
 ambari-server/src/test/resources/os_family.json |  11 ++
 13 files changed, 419 insertions(+), 189 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/BSRunner.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/BSRunner.java b/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/BSRunner.java
index 31343b5..4790691 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/BSRunner.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/BSRunner.java
@@ -181,9 +181,9 @@ class BSRunner extends Thread {
       /* Running command:
        * script hostlist bsdir user sshkeyfile
        */
-      shellCommand[0] = "sh";
-      shellCommand[1] = "-c";
-      
+      shellCommand[0] = System.getProperty("os.name").contains("Windows") ? "cmd" : "sh";
+      shellCommand[1] = System.getProperty("os.name").contains("Windows") ? "/C" : "-c";
+
       commands[0] = this.bsScript;
       commands[1] = hostString;
       commands[2] = this.requestIdDir.toString();
@@ -212,16 +212,15 @@ class BSRunner extends Thread {
         commandString.append(" " + comm);
       }
 
-     
       if (LOG.isDebugEnabled()) {
         LOG.debug(commandString);
       }
-      
+
       String bootStrapOutputFile = requestIdDir + File.separator + "bootstrap.out";
       String bootStrapErrorFile = requestIdDir + File.separator + "bootstrap.err";
       commandString.append(
           " 1> " + bootStrapOutputFile + " 2>" + bootStrapErrorFile);
-      
+
       shellCommand[2] = commandString.toString();
       Process process = Runtime.getRuntime().exec(shellCommand, env);
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
index 136e8a8..8a4e627 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
@@ -130,7 +130,13 @@ public class AmbariMetaInfoTest {
 
   @Before
   public void before() throws Exception {
-    metaInfo = createAmbariMetaInfo(new File("src/test/resources/stacks"), new File("target/version"), true);
+    File stacks = new File("src/test/resources/stacks");
+    File version = new File("target/version");
+    if (System.getProperty("os.name").contains("Windows")) {
+      stacks = new File(ClassLoader.getSystemClassLoader().getResource("stacks").getPath());
+      version = new File(new File(ClassLoader.getSystemClassLoader().getResource("").getPath()).getParent(), "version");
+    }
+    metaInfo = createAmbariMetaInfo(stacks, version, true);
   }
 
   public class MockModule extends AbstractModule {
@@ -197,10 +203,14 @@ public class AmbariMetaInfoTest {
 
     // Deleting the json file referenced by the latestBaseUrl to simulate No
     // Internet.
-    File latestUrlFile = new File(buildDir,
-        "ambari-metaInfo/HDP/2.1.1/repos/hdp.json");
-    FileUtils.deleteQuietly(latestUrlFile);
-    assertTrue(!latestUrlFile.exists());
+    File latestUrlFile = new File(buildDir, "ambari-metaInfo/HDP/2.1.1/repos/hdp.json");
+    if (System.getProperty("os.name").contains("Windows")) {
+      latestUrlFile.deleteOnExit();
+    }
+    else {
+      FileUtils.deleteQuietly(latestUrlFile);
+      assertTrue(!latestUrlFile.exists());
+    }
     ambariMetaInfo.init();
 
     List<RepositoryInfo> redhat6Repo = ambariMetaInfo.getRepositories(
@@ -271,10 +281,14 @@ public class AmbariMetaInfoTest {
 
     // Deleting the json file referenced by the latestBaseUrl to simulate No
     // Internet.
-    File latestUrlFile = new File(buildDir,
-        "ambari-metaInfo/HDP/2.1.1/repos/hdp.json");
-    FileUtils.deleteQuietly(latestUrlFile);
-    assertTrue(!latestUrlFile.exists());
+    File latestUrlFile = new File(buildDir, "ambari-metaInfo/HDP/2.1.1/repos/hdp.json");
+    if (System.getProperty("os.name").contains("Windows")) {
+      latestUrlFile.deleteOnExit();
+    }
+    else {
+      FileUtils.deleteQuietly(latestUrlFile);
+      assertTrue(!latestUrlFile.exists());
+    }
 
     // Update baseUrl
     ambariMetaInfo.updateRepoBaseURL("HDP", "2.1.1", "redhat6", "HDP-2.1.1",
@@ -456,9 +470,14 @@ public class AmbariMetaInfoTest {
   public void testMetaInfoFileFilter() throws Exception {
     String buildDir = tmpFolder.getRoot().getAbsolutePath();
     File stackRoot = new File("src/test/resources/stacks");
+    File version = new File("target/version");
+    if (System.getProperty("os.name").contains("Windows")) {
+      stackRoot = new File(ClassLoader.getSystemClassLoader().getResource("stacks").getPath());
+      version = new File(new File(ClassLoader.getSystemClassLoader().getResource("").getPath()).getParent(), "version");
+    }
     File stackRootTmp = new File(buildDir + "/ambari-metaInfo"); stackRootTmp.mkdir();
     FileUtils.copyDirectory(stackRoot, stackRootTmp);
-    AmbariMetaInfo ambariMetaInfo = createAmbariMetaInfo(stackRootTmp, new File("target/version"), true);
+    AmbariMetaInfo ambariMetaInfo = createAmbariMetaInfo(stackRootTmp, version, true);
     //todo
     //ambariMetaInfo.injector = injector;
     File f1, f2, f3;
@@ -610,10 +629,10 @@ public class AmbariMetaInfoTest {
     Assert.assertTrue(metaInfo.isOsSupported("suse11"));
     Assert.assertTrue(metaInfo.isOsSupported("sles11"));
     Assert.assertTrue(metaInfo.isOsSupported("ubuntu12"));
-    Assert.assertFalse(metaInfo.isOsSupported("win2008server6"));
-    Assert.assertFalse(metaInfo.isOsSupported("win2008serverr26"));
-    Assert.assertFalse(metaInfo.isOsSupported("win2012server6"));
-    Assert.assertFalse(metaInfo.isOsSupported("win2012serverr26"));
+    Assert.assertTrue(metaInfo.isOsSupported("win2008server6"));
+    Assert.assertTrue(metaInfo.isOsSupported("win2008serverr26"));
+    Assert.assertTrue(metaInfo.isOsSupported("win2012server6"));
+    Assert.assertTrue(metaInfo.isOsSupported("win2012serverr26"));
   }
 
   @Test
@@ -711,10 +730,15 @@ public class AmbariMetaInfoTest {
   @Test
   public void testBadStack() throws Exception {
     File stackRoot = new File("src/test/resources/bad-stacks");
+    File version = new File("target/version");
+    if (System.getProperty("os.name").contains("Windows")) {
+      stackRoot = new File(ClassLoader.getSystemClassLoader().getResource("bad-stacks").getPath());
+      version = new File(new File(ClassLoader.getSystemClassLoader().getResource("").getPath()).getParent(), "version");
+    }
     LOG.info("Stacks file " + stackRoot.getAbsolutePath());
 
     try {
-      createAmbariMetaInfo(stackRoot, new File("target/version"), true);
+      createAmbariMetaInfo(stackRoot, version, true);
       fail("Exception expected due to bad stack");
     } catch(AmbariException e) {
       e.printStackTrace();
@@ -1131,35 +1155,45 @@ public class AmbariMetaInfoTest {
 
   @Test
   public void testHooksDirInheritance() throws Exception {
+    String hookAssertionTemplate = "HDP/%s/hooks";
+    if (System.getProperty("os.name").contains("Windows")) {
+      hookAssertionTemplate = "HDP\\%s\\hooks";
+    }
     // Test hook dir determination in parent
     StackInfo stackInfo = metaInfo.getStack(STACK_NAME_HDP, "2.0.6");
-    Assert.assertEquals("HDP/2.0.6/hooks", stackInfo.getStackHooksFolder());
+    Assert.assertEquals(String.format(hookAssertionTemplate, "2.0.6"), stackInfo.getStackHooksFolder());
     // Test hook dir inheritance
     stackInfo = metaInfo.getStack(STACK_NAME_HDP, "2.0.7");
-    Assert.assertEquals("HDP/2.0.6/hooks", stackInfo.getStackHooksFolder());
+    Assert.assertEquals(String.format(hookAssertionTemplate, "2.0.6"), stackInfo.getStackHooksFolder());
     // Test hook dir override
     stackInfo = metaInfo.getStack(STACK_NAME_HDP, "2.0.8");
-    Assert.assertEquals("HDP/2.0.8/hooks", stackInfo.getStackHooksFolder());
+    Assert.assertEquals(String.format(hookAssertionTemplate, "2.0.8"), stackInfo.getStackHooksFolder());
   }
 
 
   @Test
   public void testServicePackageDirInheritance() throws Exception {
+    String assertionTemplate07 = "HDP/2.0.7/services/%s/package";
+    String assertionTemplate08 = "HDP/2.0.8/services/%s/package";
+    if (System.getProperty("os.name").contains("Windows")) {
+      assertionTemplate07 = "HDP\\2.0.7\\services\\%s\\package";
+      assertionTemplate08 = "HDP\\2.0.8\\services\\%s\\package";
+    }
     // Test service package dir determination in parent
     ServiceInfo service = metaInfo.getService(STACK_NAME_HDP, "2.0.7", "HBASE");
-    Assert.assertEquals("HDP/2.0.7/services/HBASE/package",
+    Assert.assertEquals(String.format(assertionTemplate07, "HBASE"),
             service.getServicePackageFolder());
 
     service = metaInfo.getService(STACK_NAME_HDP, "2.0.7", "HDFS");
-    Assert.assertEquals("HDP/2.0.7/services/HDFS/package",
+    Assert.assertEquals(String.format(assertionTemplate07, "HDFS"),
             service.getServicePackageFolder());
     // Test service package dir inheritance
     service = metaInfo.getService(STACK_NAME_HDP, "2.0.8", "HBASE");
-    Assert.assertEquals("HDP/2.0.7/services/HBASE/package",
+    Assert.assertEquals(String.format(assertionTemplate07, "HBASE"),
             service.getServicePackageFolder());
     // Test service package dir override
     service = metaInfo.getService(STACK_NAME_HDP, "2.0.8", "HDFS");
-    Assert.assertEquals("HDP/2.0.8/services/HDFS/package",
+    Assert.assertEquals(String.format(assertionTemplate08, "HDFS"),
             service.getServicePackageFolder());
   }
 
@@ -1599,14 +1633,19 @@ public class AmbariMetaInfoTest {
     }
   }
 
-  private TestAmbariMetaInfo setupTempAmbariMetaInfo(String buildDir, boolean replayMocks)
-      throws Exception {
+  private TestAmbariMetaInfo setupTempAmbariMetaInfo(String buildDir, boolean replayMocks) throws Exception {
     File stackRootTmp = new File(buildDir + "/ambari-metaInfo");
     File stackRoot = new File("src/test/resources/stacks");
+    File version = new File("target/version");
+
+    if (System.getProperty("os.name").contains("Windows")) {
+      stackRoot = new File(ClassLoader.getSystemClassLoader().getResource("stacks").getPath());
+      version = new File(new File(ClassLoader.getSystemClassLoader().getResource("").getPath()).getParent(), "version");
+    }
+
     stackRootTmp.mkdir();
     FileUtils.copyDirectory(stackRoot, stackRootTmp);
-    TestAmbariMetaInfo ambariMetaInfo = createAmbariMetaInfo(stackRootTmp, new File(
-        "target/version"), replayMocks);
+    TestAmbariMetaInfo ambariMetaInfo = createAmbariMetaInfo(stackRootTmp, version, replayMocks);
 
     return ambariMetaInfo;
   }
@@ -1685,7 +1724,12 @@ public class AmbariMetaInfoTest {
 
       //OSFamily
       Configuration config = createNiceMock(Configuration.class);
-      expect(config.getSharedResourcesDirPath()).andReturn("./src/test/resources").anyTimes();
+      if (System.getProperty("os.name").contains("Windows")) {
+        expect(config.getSharedResourcesDirPath()).andReturn(ClassLoader.getSystemClassLoader().getResource("").getPath()).anyTimes();
+      }
+      else {
+        expect(config.getSharedResourcesDirPath()).andReturn("./src/test/resources").anyTimes();
+      }
       replay(config);
       osFamily = new OsFamily(config);
       f = c.getDeclaredField("os_family");

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/java/org/apache/ambari/server/api/services/ViewSubResourceServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/ViewSubResourceServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/ViewSubResourceServiceTest.java
index aaa0d62..25b477f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/ViewSubResourceServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/ViewSubResourceServiceTest.java
@@ -146,7 +146,7 @@ public class ViewSubResourceServiceTest extends BaseServiceTest {
         "  }\n" +
         "}";
 
-    assertEquals(expected, o);
+    assertEquals(expected, o.toString().replace("\r", ""));
 
     verify(uriInfo, resource);
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/java/org/apache/ambari/server/api/services/serializers/JsonSerializerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/serializers/JsonSerializerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/serializers/JsonSerializerTest.java
index 4bd12d3..2ea45dc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/serializers/JsonSerializerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/serializers/JsonSerializerTest.java
@@ -72,7 +72,7 @@ public class JsonSerializerTest {
     replay(uriInfo, resource/*, resource2*/);
 
     //execute test
-    Object o = new JsonSerializer().serialize(result);
+    Object o = new JsonSerializer().serialize(result).toString().replace("\r", "");
 
     String expected = "{\n" +
         "  \"href\" : \"this is an href\",\n" +
@@ -126,7 +126,7 @@ public class JsonSerializerTest {
     replay(uriInfo, resource);
 
     //execute test
-    Object o = new JsonSerializer().serialize(result);
+    Object o = new JsonSerializer().serialize(result).toString().replace("\r", "");
 
     String expected = "{\n" +
         "  \"resources\" : [\n" +
@@ -182,7 +182,7 @@ public class JsonSerializerTest {
     replay(uriInfo, resource/*, resource2*/);
 
     //execute test
-    Object o = new JsonSerializer().serialize(result);
+    Object o = new JsonSerializer().serialize(result).toString().replace("\r", "");
     String expected = "[\n" +
     "  {\n" +
     "    \"href\" : \"this is an href\",\n" +

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/java/org/apache/ambari/server/bootstrap/BootStrapTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/bootstrap/BootStrapTest.java b/ambari-server/src/test/java/org/apache/ambari/server/bootstrap/BootStrapTest.java
index a213f21..0172b29 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/bootstrap/BootStrapTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/bootstrap/BootStrapTest.java
@@ -59,19 +59,25 @@ public class BootStrapTest extends TestCase {
   @Test
   public void testRun() throws Exception {
     Properties properties = new Properties();
-    String bootdir =  temp.newFolder("bootdir").toString();
-    String metadetadir =  temp.newFolder("metadetadir").toString();
-    String serverVersionFilePath =  temp.newFolder("serverVersionFilePath").toString();
+    String bootdir = temp.newFolder("bootdir").toString();
+    String metadetadir = temp.newFolder("metadetadir").toString();
+    String serverVersionFilePath = temp.newFolder("serverVersionFilePath").toString();
     LOG.info("Bootdir is " + bootdir);
     LOG.info("Metadetadir is " + metadetadir);
     LOG.info("ServerVersionFilePath is " + serverVersionFilePath);
-    properties.setProperty(Configuration.BOOTSTRAP_DIR,
-       bootdir);
+
+    String sharedResourcesDir = "src/test/resources/";
+    if (System.getProperty("os.name").contains("Windows")) {
+      sharedResourcesDir = ClassLoader.getSystemClassLoader().getResource("").getPath();
+    }
+
+    properties.setProperty(Configuration.BOOTSTRAP_DIR, bootdir);
     properties.setProperty(Configuration.BOOTSTRAP_SCRIPT, "echo");
     properties.setProperty(Configuration.SRVR_KSTR_DIR_KEY, "target" + File.separator + "classes");
     properties.setProperty(Configuration.METADETA_DIR_PATH, metadetadir);
     properties.setProperty(Configuration.SERVER_VERSION_FILE, serverVersionFilePath);
-    properties.setProperty(Configuration.SHARED_RESOURCES_DIR_KEY, "src/test/resources/");
+    properties.setProperty(Configuration.SHARED_RESOURCES_DIR_KEY, sharedResourcesDir);
+
     Configuration conf = new Configuration(properties);
     AmbariMetaInfo ambariMetaInfo = new AmbariMetaInfo(conf);
     BootStrapImpl impl = new BootStrapImpl(conf, ambariMetaInfo);
@@ -91,12 +97,12 @@ public class BootStrapTest extends TestCase {
     LOG.info("Status " + status.getStatus());
     int num = 0;
     while ((status.getStatus() == BSStat.RUNNING) && (num < 500)) {
-        status = impl.getStatus(response.getRequestId());
-        Thread.sleep(100);
-        num++;
+      status = impl.getStatus(response.getRequestId());
+      Thread.sleep(100);
+      num++;
     }
     LOG.info("Status: log " + status.getLog() + " status=" + status.getStatus()
-        );
+    );
     /* Note its an echo command so it should echo host1,host2 */
     Assert.assertTrue(status.getLog().contains("host1,host2"));
     Assert.assertEquals(BSStat.SUCCESS, status.getStatus());
@@ -104,68 +110,75 @@ public class BootStrapTest extends TestCase {
     Assert.assertFalse(new File(bootdir + File.separator + "1" + File.separator + "host_pass").exists());
   }
 
-    @Test
-    public void testHostFailure() throws Exception {
-        Properties properties = new Properties();
-        String bootdir =  temp.newFolder("bootdir").toString();
-        String metadetadir =  temp.newFolder("metadetadir").toString();
-        String serverVersionFilePath =  temp.newFolder("serverVersionFilePath").toString();
-        LOG.info("Bootdir is " + bootdir);
-        LOG.info("Metadetadir is " + metadetadir);
-        LOG.info("ServerVersionFilePath is " + serverVersionFilePath);
-        properties.setProperty(Configuration.BOOTSTRAP_DIR,
-                bootdir);
-        properties.setProperty(Configuration.BOOTSTRAP_SCRIPT, "echo");
-        properties.setProperty(Configuration.SRVR_KSTR_DIR_KEY, "target" + File.separator + "classes");
-        properties.setProperty(Configuration.METADETA_DIR_PATH, metadetadir);
-        properties.setProperty(Configuration.SERVER_VERSION_FILE, serverVersionFilePath);
-      properties.setProperty(Configuration.SHARED_RESOURCES_DIR_KEY, "src/test/resources/");
-        Configuration conf = new Configuration(properties);
-        AmbariMetaInfo ambariMetaInfo = new AmbariMetaInfo(conf);
-        BootStrapImpl impl = new BootStrapImpl(conf, ambariMetaInfo);
-        impl.init();
-        SshHostInfo info = new SshHostInfo();
-        info.setSshKey("xyz");
-        ArrayList<String> hosts = new ArrayList<String>();
-        hosts.add("host1");
-        hosts.add("host2");
-        info.setHosts(hosts);
-        info.setUser("user");
-        info.setPassword("passwd");
-        BSResponse response = impl.runBootStrap(info);
-        long requestId = response.getRequestId();
-        LOG.info("Response id from bootstrap " + requestId);
-    /* create failed done file for host2 */
-        File requestDir = new File(bootdir, Long.toString(requestId));
-    /* wait while directory is created */
-        int num = 0;
-        while (!requestDir.exists() && num<500) {
-            Thread.sleep(100);
-            num++;
-        }
-        if (!requestDir.exists()) {
-            LOG.warn("RequestDir does not exists");
-        }
-        FileUtils.writeStringToFile(new File(requestDir, "host1.done"), "0");
-        FileUtils.writeStringToFile(new File(requestDir, "host2.done"), "1");
-    /* do a query */
-        BootStrapStatus status = impl.getStatus(response.getRequestId());
-        LOG.info("Status " + status.getStatus());
-        num = 0;
-        while ((status.getStatus() == BSStat.RUNNING) && (num < 500)) {
-            status = impl.getStatus(response.getRequestId());
-            Thread.sleep(100);
-            num++;
-        }
-        LOG.info("Status: log " + status.getLog() + " status=" + status.getStatus()
-        );
-    /* Note its an echo command so it should echo host1,host2 */
-        Assert.assertTrue(status.getLog().contains("host1,host2"));
-        Assert.assertEquals(BSStat.ERROR, status.getStatus());
-        Assert.assertEquals("DONE", status.getHostsStatus().get(0).getStatus());
-        Assert.assertEquals("FAILED", status.getHostsStatus().get(1).getStatus());
+  @Test
+  public void testHostFailure() throws Exception {
+    Properties properties = new Properties();
+    String bootdir = temp.newFolder("bootdir").toString();
+    String metadetadir = temp.newFolder("metadetadir").toString();
+    String serverVersionFilePath = temp.newFolder("serverVersionFilePath").toString();
+    LOG.info("Bootdir is " + bootdir);
+    LOG.info("Metadetadir is " + metadetadir);
+    LOG.info("ServerVersionFilePath is " + serverVersionFilePath);
+
+    String sharedResourcesDir = "src/test/resources/";
+    String serverKSTRDir = "target" + File.separator + "classes";
+    if (System.getProperty("os.name").contains("Windows")) {
+      sharedResourcesDir = ClassLoader.getSystemClassLoader().getResource("").getPath();
+      serverKSTRDir = new File(new File(ClassLoader.getSystemClassLoader().getResource("").getPath()).getParent(), "classes").getPath();
     }
 
+    properties.setProperty(Configuration.BOOTSTRAP_DIR, bootdir);
+    properties.setProperty(Configuration.BOOTSTRAP_SCRIPT, "echo");
+    properties.setProperty(Configuration.SRVR_KSTR_DIR_KEY, serverKSTRDir);
+    properties.setProperty(Configuration.METADETA_DIR_PATH, metadetadir);
+    properties.setProperty(Configuration.SERVER_VERSION_FILE, serverVersionFilePath);
+    properties.setProperty(Configuration.SHARED_RESOURCES_DIR_KEY, sharedResourcesDir);
+    Configuration conf = new Configuration(properties);
+    AmbariMetaInfo ambariMetaInfo = new AmbariMetaInfo(conf);
+    BootStrapImpl impl = new BootStrapImpl(conf, ambariMetaInfo);
+    impl.init();
+    SshHostInfo info = new SshHostInfo();
+    info.setSshKey("xyz");
+    ArrayList<String> hosts = new ArrayList<String>();
+    hosts.add("host1");
+    hosts.add("host2");
+    info.setHosts(hosts);
+    info.setUser("user");
+    info.setPassword("passwd");
+    BSResponse response = impl.runBootStrap(info);
+    long requestId = response.getRequestId();
+    LOG.info("Response id from bootstrap " + requestId);
+      /* create failed done file for host2 */
+    File requestDir = new File(bootdir, Long.toString(requestId));
+      /* wait while directory is created */
+    int num = 0;
+    while (!requestDir.exists() && num < 500) {
+      Thread.sleep(100);
+      num++;
+    }
+    if (!requestDir.exists()) {
+      LOG.warn("RequestDir does not exists");
+    }
+    FileUtils.writeStringToFile(new File(requestDir, "host1.done"), "0");
+    FileUtils.writeStringToFile(new File(requestDir, "host2.done"), "1");
+      /* do a query */
+    BootStrapStatus status = impl.getStatus(response.getRequestId());
+    LOG.info("Status " + status.getStatus());
+    num = 0;
+    while ((status.getStatus() == BSStat.RUNNING) && (num < 500)) {
+      status = impl.getStatus(response.getRequestId());
+      Thread.sleep(100);
+      num++;
+    }
+    LOG.info("Status: log " + status.getLog() + " status=" + status.getStatus()
+    );
+      /* Note its an echo command so it should echo host1,host2 */
+    Assert.assertTrue(status.getLog().contains("host1,host2"));
+    Assert.assertEquals(BSStat.ERROR, status.getStatus());
+    Assert.assertEquals("DONE", status.getHostsStatus().get(0).getStatus());
+    Assert.assertEquals("FAILED", status.getHostsStatus().get(1).getStatus());
+  }
+
 
   @Test
   public void testPolling() throws Exception {
@@ -180,7 +193,7 @@ public class BootStrapTest extends TestCase {
     listHosts.add("host1");
     listHosts.add("host2");
     BSHostStatusCollector collector = new BSHostStatusCollector(tmpFolder,
-        listHosts);
+            listHosts);
     collector.run();
     List<BSHostStatus> polledHostStatus = collector.getHostStatus();
     Assert.assertTrue(polledHostStatus.size() == 2);

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
index 1f5d9aa..7f353a5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
@@ -196,11 +196,16 @@ public class ClientConfigResourceProviderTest {
     String stackVersion = "V1";
 
     String stackRoot="/tmp/stacks/S1/V1";
-
     String packageFolder="PIG/package";
 
+    if (System.getProperty("os.name").contains("Windows")) {
+      stackRoot = "\\tmp\\stacks\\S1\\V1";
+      packageFolder = "PIG\\package";
+    }
+
+    File stackRootFile = new File(stackRoot);
     HashMap<String, Host> hosts = new HashMap<String, Host>();
-    hosts.put(hostName,host);
+    hosts.put(hostName, host);
     HashMap<String, Service> services = new HashMap<String, Service>();
     services.put(serviceName,service);
     HashMap<String, ServiceComponent> serviceComponentMap = new HashMap<String, ServiceComponent>();
@@ -264,7 +269,7 @@ public class ClientConfigResourceProviderTest {
             (String) anyObject(), (String) anyObject())).andReturn(componentInfo).anyTimes();
     expect(componentInfo.getCommandScript()).andReturn(commandScriptDefinition);
     expect(componentInfo.getClientConfigFiles()).andReturn(clientConfigFileDefinitionList);
-    expect(ambariMetaInfo.getStackRoot()).andReturn(new File(stackRoot));
+    expect(ambariMetaInfo.getStackRoot()).andReturn(stackRootFile);
     expect(cluster.getConfig("hive-site", null)).andReturn(clusterConfig);
     expect(cluster.getDesiredConfigs()).andReturn(desiredConfigMap);
     expect(clusters.getHostsForCluster(clusterName)).andReturn(hosts);
@@ -286,6 +291,15 @@ public class ClientConfigResourceProviderTest {
     String commandLine = "ambari-python-wrap /tmp/stacks/S1/V1/PIG/package/null generate_configs null " +
             "/tmp/stacks/S1/V1/PIG/package /var/lib/ambari-server/tmp/structured-out.json " +
             "INFO /var/lib/ambari-server/tmp";
+
+    if (System.getProperty("os.name").contains("Windows")) {
+      String absoluteStackRoot = stackRootFile.getAbsolutePath();
+      commandLine = "ambari-python-wrap " + absoluteStackRoot +
+              "\\PIG\\package\\null generate_configs null " +
+              absoluteStackRoot + "\\PIG\\package /var/lib/ambari-server/tmp\\structured-out.json " +
+              "INFO /var/lib/ambari-server/tmp";
+    }
+
     ProcessBuilder processBuilder = PowerMock.createNiceMock(ProcessBuilder.class);
     PowerMock.expectNew(ProcessBuilder.class,Arrays.asList(commandLine.split("\\s+"))).andReturn(processBuilder).once();
     expect(processBuilder.start()).andReturn(process).once();

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
index 7c33bba..621caba 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
@@ -23,6 +23,7 @@ import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.ControllerModule;
 import org.springframework.beans.factory.config.BeanDefinition;
 
+import java.io.File;
 import java.util.Collections;
 import java.util.Properties;
 import java.util.Set;
@@ -58,14 +59,20 @@ public class InMemoryDefaultTestModule extends AbstractModule {
 
   @Override
   protected void configure() {
+    String stacks = "src/test/resources/stacks";
+    String version = "target/version";
+    String sharedResourcesDir = "src/test/resources/";
+    if (System.getProperty("os.name").contains("Windows")) {
+      stacks = ClassLoader.getSystemClassLoader().getResource("stacks").getPath();
+      version = new File(new File(ClassLoader.getSystemClassLoader().getResource("").getPath()).getParent(), "version").getPath();
+      sharedResourcesDir = ClassLoader.getSystemClassLoader().getResource("").getPath();
+    }
+
     properties.setProperty(Configuration.SERVER_PERSISTENCE_TYPE_KEY, "in-memory");
-    properties.setProperty(Configuration.METADETA_DIR_PATH,
-        "src/test/resources/stacks");
-    properties.setProperty(Configuration.SERVER_VERSION_FILE,
-            "target/version");
-    properties.setProperty(Configuration.OS_VERSION_KEY,
-        "centos5");
-    properties.setProperty(Configuration.SHARED_RESOURCES_DIR_KEY, "src/test/resources/");
+    properties.setProperty(Configuration.METADETA_DIR_PATH, stacks);
+    properties.setProperty(Configuration.SERVER_VERSION_FILE, version);
+    properties.setProperty(Configuration.OS_VERSION_KEY, "centos5");
+    properties.setProperty(Configuration.SHARED_RESOURCES_DIR_KEY, sharedResourcesDir);
 
     try {
       install(new BeanDefinitionsCachingTestControllerModule(properties));

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/java/org/apache/ambari/server/security/CertGenerationTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/CertGenerationTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/CertGenerationTest.java
index 9ce76c9..10645b9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/CertGenerationTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/CertGenerationTest.java
@@ -109,15 +109,22 @@ public class CertGenerationTest {
     //Test using actual ca.config.
     try {
       File caConfig = new File("conf/unix/ca.config");
-      File caConfigTest  =
-        new File(temp.getRoot().getAbsolutePath(), "ca.config");
+      if (System.getProperty("os.name").contains("Windows")) {
+        caConfig = new File(new File(ClassLoader.getSystemClassLoader().getResource("").getPath()).getParentFile().getParentFile(), "conf\\windows\\ca.config");
+      }
+      File caConfigTest = new File(temp.getRoot().getAbsolutePath(), "ca.config");
       File newCertsDir = new File(temp.getRoot().getAbsolutePath(), "newcerts");
       newCertsDir.mkdirs();
       File indexTxt = new File(temp.getRoot().getAbsolutePath(), "index.txt");
       indexTxt.createNewFile();
 
       String content = IOUtils.toString(new FileInputStream(caConfig));
-      content = content.replaceAll("/var/lib/ambari-server/keys/db", temp.getRoot().getAbsolutePath());
+      if (System.getProperty("os.name").contains("Windows")) {
+        content = content.replace("keystore\\\\db", temp.getRoot().getAbsolutePath().replace("\\", "\\\\"));
+      }
+      else {
+        content = content.replaceAll("/var/lib/ambari-server/keys/db", temp.getRoot().getAbsolutePath());
+      }
       IOUtils.write(content, new FileOutputStream(caConfigTest));
     } catch (IOException e) {
       e.printStackTrace();
@@ -134,25 +141,19 @@ public class CertGenerationTest {
 	
   @Test
   public void testServerCertGen() throws Exception {
-
-    File serverCrt = new File(temp.getRoot().getAbsoluteFile() +
-    						  File.separator + Configuration.SRVR_CRT_NAME_DEFAULT);
+    File serverCrt = new File(temp.getRoot().getAbsoluteFile() + File.separator + Configuration.SRVR_CRT_NAME_DEFAULT);
     Assert.assertTrue(serverCrt.exists());
   }
 
   @Test
   public void testServerKeyGen() throws Exception {
-
-    File serverKey = new File(temp.getRoot().getAbsoluteFile() +
-    						  File.separator + Configuration.SRVR_KEY_NAME_DEFAULT);
+    File serverKey = new File(temp.getRoot().getAbsoluteFile() + File.separator + Configuration.SRVR_KEY_NAME_DEFAULT);
     Assert.assertTrue(serverKey.exists());
   }
 
   @Test
   public void testServerKeystoreGen() throws Exception {
-
-    File serverKeyStrore = new File(temp.getRoot().getAbsoluteFile() +
-    						  File.separator + Configuration.KSTR_NAME_DEFAULT);
+    File serverKeyStrore = new File(temp.getRoot().getAbsoluteFile() + File.separator + Configuration.KSTR_NAME_DEFAULT);
     Assert.assertTrue(serverKeyStrore.exists());
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
index 0502e1a..940c65a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
@@ -67,7 +67,11 @@ public class StackManagerTest {
   }
 
   public static StackManager createTestStackManager() throws Exception {
-    return createTestStackManager("./src/test/resources/stacks/");
+    String stack = "./src/test/resources/stacks/";
+    if (System.getProperty("os.name").contains("Windows")) {
+      stack = ClassLoader.getSystemClassLoader().getResource("stacks").getPath();
+    }
+    return createTestStackManager(stack);
   }
 
   public static StackManager createTestStackManager(String stackRoot) throws Exception {
@@ -76,7 +80,12 @@ public class StackManagerTest {
       dao = createNiceMock(MetainfoDAO.class);
       actionMetadata = createNiceMock(ActionMetadata.class);
       Configuration config = createNiceMock(Configuration.class);
-      expect(config.getSharedResourcesDirPath()).andReturn("./src/test/resources").anyTimes();
+      if (System.getProperty("os.name").contains("Windows")) {
+        expect(config.getSharedResourcesDirPath()).andReturn(ClassLoader.getSystemClassLoader().getResource("").getPath()).anyTimes();
+      }
+      else {
+        expect(config.getSharedResourcesDirPath()).andReturn("./src/test/resources").anyTimes();
+      }
       replay(config);
       osFamily = new OsFamily(config);
 
@@ -291,7 +300,12 @@ public class StackManagerTest {
     // overridden value
     assertEquals("Apache Hadoop Stream processing framework (Extended)", stormService.getComment());
     assertEquals("New version", stormService.getVersion());
-    assertEquals("OTHER/1.0/services/STORM/package", stormService.getServicePackageFolder());
+    if (System.getProperty("os.name").contains("Windows")) {
+      assertEquals("OTHER\\1.0\\services\\STORM\\package", stormService.getServicePackageFolder());
+    }
+    else {
+      assertEquals("OTHER/1.0/services/STORM/package", stormService.getServicePackageFolder());
+    }
     // compare components
     List<ComponentInfo> stormServiceComponents = stormService.getComponents();
     List<ComponentInfo> baseStormServiceComponents = baseStormService.getComponents();
@@ -514,8 +528,12 @@ public class StackManagerTest {
     OsFamily osFamily = createNiceMock(OsFamily.class);
     replay(actionMetadata);
     try {
-    new StackManager(new File("./src/test/resources/stacks_with_cycle/"),
-        new StackContext(null, actionMetadata, osFamily));
+      String stacksCycle1 = "./src/test/resources/stacks_with_cycle/";
+      if (System.getProperty("os.name").contains("Windows")) {
+        stacksCycle1 = ClassLoader.getSystemClassLoader().getResource("stacks_with_cycle").getPath();
+      }
+      new StackManager(new File(stacksCycle1),
+              new StackContext(null, actionMetadata, osFamily));
       fail("Expected exception due to cyclic stack");
     } catch (AmbariException e) {
       // expected
@@ -523,8 +541,12 @@ public class StackManagerTest {
     }
 
     try {
-      new StackManager(new File("./src/test/resources/stacks_with_cycle2/"),
-          new StackContext(null, actionMetadata, osFamily));
+      String stacksCycle2 = "./src/test/resources/stacks_with_cycle2/";
+      if (System.getProperty("os.name").contains("Windows")) {
+        stacksCycle2 = ClassLoader.getSystemClassLoader().getResource("stacks_with_cycle2").getPath();
+      }
+      new StackManager(new File(stacksCycle2),
+              new StackContext(null, actionMetadata, osFamily));
       fail("Expected exception due to cyclic stack");
     } catch (AmbariException e) {
       // expected
@@ -584,8 +606,12 @@ public class StackManagerTest {
     // ensure that service check is added for HDFS
     actionMetadata.addServiceCheckAction("HDFS");
     replay(dao, actionMetadata, osFamily);
+    String singleStack = "./src/test/resources/single_stack";
+    if (System.getProperty("os.name").contains("Windows")) {
+      singleStack = ClassLoader.getSystemClassLoader().getResource("single_stack").getPath();
+    }
     StackManager stackManager = new StackManager(
-        new File("./src/test/resources/single_stack".replace("/", File.separator)),
+        new File(singleStack.replace("/", File.separator)),
         new StackContext(dao, actionMetadata, osFamily));
 
     Collection<StackInfo> stacks = stackManager.getStacks();

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/java/org/apache/ambari/server/state/stack/OSFamilyTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/OSFamilyTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/OSFamilyTest.java
index e4aa8f7..7957860 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/OSFamilyTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/OSFamilyTest.java
@@ -46,7 +46,7 @@ public class OSFamilyTest {
    Set<String> expected_oslist = new HashSet<String>(Arrays.asList(
       "redhat6", "oraclelinux5", "suse11", "fedora6", "opensuse11",
       "centos6", "fedora5","centos5", "ubuntu12", "redhat5", "sles11",
-      "oraclelinux6", "debian12", "sled11"
+      "oraclelinux6", "debian12", "sled11", "win2012server6", "win2012serverr26", "win2008serverr26", "win2008server6"
    ));
 
    Assert.assertNotNull(actual_oslist);

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/java/org/apache/ambari/server/view/ViewExtractorTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewExtractorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewExtractorTest.java
index 047c8a3..02ec916 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewExtractorTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewExtractorTest.java
@@ -90,13 +90,20 @@ public class ViewExtractorTest {
     expect(configuration.getViewExtractionThreadPoolCoreSize()).andReturn(2).anyTimes();
     expect(configuration.getViewExtractionThreadPoolMaxSize()).andReturn(3).anyTimes();
     expect(configuration.getViewExtractionThreadPoolTimeout()).andReturn(10000L).anyTimes();
-
-    expect(viewArchive.getAbsolutePath()).andReturn(
-        "/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(viewArchive.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}").anyTimes();
+    }
+    else {
+      expect(viewArchive.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    }
 
     expect(archiveDir.exists()).andReturn(false);
-    expect(archiveDir.getAbsolutePath()).andReturn(
-        "/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(archiveDir.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}").anyTimes();
+    }
+    else {
+      expect(archiveDir.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    }
     expect(archiveDir.mkdir()).andReturn(true);
     expect(archiveDir.toURI()).andReturn(new URI("file:./"));
 
@@ -151,7 +158,12 @@ public class ViewExtractorTest {
 
     ViewExtractor viewExtractor = getViewExtractor(viewDefinition);
 
-    Assert.assertTrue(viewExtractor.ensureExtractedArchiveDirectory("/var/lib/ambari-server/resources/views/work"));
+    if (System.getProperty("os.name").contains("Windows")) {
+      Assert.assertTrue(viewExtractor.ensureExtractedArchiveDirectory("\\var\\lib\\ambari-server\\resources\\views\\work"));
+    }
+    else {
+      Assert.assertTrue(viewExtractor.ensureExtractedArchiveDirectory("/var/lib/ambari-server/resources/views/work"));
+    }
 
     verify(extractedArchiveDir, viewArchive, archiveDir, entryFile, classesDir, libDir, metaInfDir, viewJarFile,
         jarEntry, fos, configuration, viewDir, fileEntry, viewDAO);
@@ -165,7 +177,12 @@ public class ViewExtractorTest {
 
     viewExtractor = getViewExtractor(viewDefinition);
 
-    Assert.assertTrue(viewExtractor.ensureExtractedArchiveDirectory("/var/lib/ambari-server/resources/views/work"));
+    if (System.getProperty("os.name").contains("Windows")) {
+      Assert.assertTrue(viewExtractor.ensureExtractedArchiveDirectory("\\var\\lib\\ambari-server\\resources\\views\\work"));
+    }
+    else {
+      Assert.assertTrue(viewExtractor.ensureExtractedArchiveDirectory("/var/lib/ambari-server/resources/views/work"));
+    }
 
     verify(extractedArchiveDir);
 
@@ -178,8 +195,12 @@ public class ViewExtractorTest {
 
     viewExtractor = getViewExtractor(viewDefinition);
 
-    Assert.assertFalse(viewExtractor.ensureExtractedArchiveDirectory("/var/lib/ambari-server/resources/views/work"));
-
+    if (System.getProperty("os.name").contains("Windows")) {
+      Assert.assertFalse(viewExtractor.ensureExtractedArchiveDirectory("\\var\\lib\\ambari-server\\resources\\views\\work"));
+    }
+    else {
+      Assert.assertFalse(viewExtractor.ensureExtractedArchiveDirectory("/var/lib/ambari-server/resources/views/work"));
+    }
     verify(extractedArchiveDir);
   }
 
@@ -190,12 +211,22 @@ public class ViewExtractorTest {
 
     Map<String, File> files = new HashMap<String, File>();
 
-    files.put("/var/lib/ambari-server/resources/views/work", extractedArchiveDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}", archiveDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/view.xml", entryFile);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/classes", classesDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/lib", libDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/META-INF", metaInfDir);
+    if (System.getProperty("os.name").contains("Windows")) {
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work", extractedArchiveDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}", archiveDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\view.xml", entryFile);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\WEB-INF/classes", classesDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\WEB-INF/lib", libDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\META-INF", metaInfDir);
+    }
+    else {
+      files.put("/var/lib/ambari-server/resources/views/work", extractedArchiveDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}", archiveDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/view.xml", entryFile);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/classes", classesDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/lib", libDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/META-INF", metaInfDir);
+    }
 
     Map<File, FileOutputStream> outputStreams = new HashMap<File, FileOutputStream>();
     outputStreams.put(entryFile, fos);

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
index e956826..26a9b36 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
@@ -50,6 +50,7 @@ import java.util.jar.JarInputStream;
 
 import javax.xml.bind.JAXBException;
 
+import junit.framework.TestListener;
 import org.apache.ambari.server.api.resources.SubResourceDefinition;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.spi.Resource;
@@ -234,13 +235,22 @@ public class ViewRegistryTest {
     }
 
     Map<String, File> files = new HashMap<String, File>();
-
-    files.put("/var/lib/ambari-server/resources/views/work", extractedArchiveDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}", archiveDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/view.xml", entryFile);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/classes", classesDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/lib", libDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/META-INF", metaInfDir);
+    if (System.getProperty("os.name").contains("Windows")) {
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work", extractedArchiveDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}", archiveDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\view.xml", entryFile);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\WEB-INF/classes", classesDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\WEB-INF/lib", libDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\META-INF", metaInfDir);
+    }
+    else {
+      files.put("/var/lib/ambari-server/resources/views/work", extractedArchiveDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}", archiveDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/view.xml", entryFile);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/classes", classesDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/lib", libDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/META-INF", metaInfDir);
+    }
 
     Map<File, FileOutputStream> outputStreams = new HashMap<File, FileOutputStream>();
     outputStreams.put(entryFile, fos);
@@ -250,7 +260,12 @@ public class ViewRegistryTest {
 
     // set expectations
     expect(configuration.getViewsDir()).andReturn(viewDir);
-    expect(viewDir.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views");
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(viewDir.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views");
+    }
+    else {
+      expect(viewDir.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views");
+    }
 
     expect(configuration.getViewExtractionThreadPoolCoreSize()).andReturn(2).anyTimes();
     expect(configuration.getViewExtractionThreadPoolMaxSize()).andReturn(3).anyTimes();
@@ -259,11 +274,20 @@ public class ViewRegistryTest {
     expect(viewDir.listFiles()).andReturn(new File[]{viewArchive});
 
     expect(viewArchive.isDirectory()).andReturn(false);
-    expect(viewArchive.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(viewArchive.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}").anyTimes();
+    }
+    else {
+      expect(viewArchive.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    }
 
     expect(archiveDir.exists()).andReturn(false);
-    expect(archiveDir.getAbsolutePath()).andReturn(
-        "/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(archiveDir.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}").anyTimes();
+    }
+    else {
+      expect(archiveDir.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    }
     expect(archiveDir.mkdir()).andReturn(true);
     expect(archiveDir.toURI()).andReturn(new URI("file:./"));
 
@@ -380,12 +404,22 @@ public class ViewRegistryTest {
 
     Map<String, File> files = new HashMap<String, File>();
 
-    files.put("/var/lib/ambari-server/resources/views/work", extractedArchiveDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}", archiveDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/view.xml", entryFile);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/classes", classesDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/lib", libDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/META-INF", metaInfDir);
+    if (System.getProperty("os.name").contains("Windows")) {
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work", extractedArchiveDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}", archiveDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\view.xml", entryFile);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\WEB-INF/classes", classesDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\WEB-INF/lib", libDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\META-INF", metaInfDir);
+    }
+    else {
+      files.put("/var/lib/ambari-server/resources/views/work", extractedArchiveDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}", archiveDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/view.xml", entryFile);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/classes", classesDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/lib", libDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/META-INF", metaInfDir);
+    }
 
     Map<File, FileOutputStream> outputStreams = new HashMap<File, FileOutputStream>();
     outputStreams.put(entryFile, fos);
@@ -395,7 +429,12 @@ public class ViewRegistryTest {
 
     // set expectations
     expect(configuration.getViewsDir()).andReturn(viewDir);
-    expect(viewDir.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views");
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(viewDir.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views");
+    }
+    else {
+      expect(viewDir.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views");
+    }
 
     expect(configuration.getViewExtractionThreadPoolCoreSize()).andReturn(2).anyTimes();
     expect(configuration.getViewExtractionThreadPoolMaxSize()).andReturn(3).anyTimes();
@@ -404,11 +443,20 @@ public class ViewRegistryTest {
     expect(viewDir.listFiles()).andReturn(new File[]{viewArchive});
 
     expect(viewArchive.isDirectory()).andReturn(false);
-    expect(viewArchive.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}");
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(viewArchive.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}");
+    }
+    else {
+      expect(viewArchive.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}");
+    }
 
     expect(archiveDir.exists()).andReturn(false);
-    expect(archiveDir.getAbsolutePath()).andReturn(
-        "/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(archiveDir.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}").anyTimes();
+    }
+    else {
+      expect(archiveDir.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    }
     expect(archiveDir.mkdir()).andReturn(true);
     expect(archiveDir.toURI()).andReturn(new URI("file:./"));
 
@@ -1062,13 +1110,24 @@ public class ViewRegistryTest {
 
     Map<String, File> files = new HashMap<String, File>();
 
-    files.put("/var/lib/ambari-server/resources/views/my_view-1.0.0.jar", viewArchive);
-    files.put("/var/lib/ambari-server/resources/views/work", extractedArchiveDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}", archiveDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/view.xml", entryFile);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/classes", classesDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/lib", libDir);
-    files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/META-INF", metaInfDir);
+    if (System.getProperty("os.name").contains("Windows")) {
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\my_view-1.0.0.jar", viewArchive);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work", extractedArchiveDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}", archiveDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\view.xml", entryFile);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\WEB-INF\\classes", classesDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\WEB-INF\\lib", libDir);
+      files.put("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}\\META-INF", metaInfDir);
+    }
+    else {
+      files.put("/var/lib/ambari-server/resources/views/my_view-1.0.0.jar", viewArchive);
+      files.put("/var/lib/ambari-server/resources/views/work", extractedArchiveDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}", archiveDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/view.xml", entryFile);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/classes", classesDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/WEB-INF/lib", libDir);
+      files.put("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}/META-INF", metaInfDir);
+    }
 
     Map<File, FileOutputStream> outputStreams = new HashMap<File, FileOutputStream>();
     outputStreams.put(entryFile, fos);
@@ -1078,20 +1137,39 @@ public class ViewRegistryTest {
 
     // set expectations
     expect(configuration.getViewsDir()).andReturn(viewDir);
-    expect(viewDir.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views");
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(viewDir.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views");
+    }
+    else {
+      expect(viewDir.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views");
+    }
 
     expect(configuration.getViewExtractionThreadPoolCoreSize()).andReturn(2).anyTimes();
     expect(configuration.getViewExtractionThreadPoolMaxSize()).andReturn(3).anyTimes();
     expect(configuration.getViewExtractionThreadPoolTimeout()).andReturn(10000L).anyTimes();
 
-    expect(viewArchive.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(viewArchive.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}").anyTimes();
+    }
+    else {
+      expect(viewArchive.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    }
 
     expect(archiveDir.exists()).andReturn(false);
-    expect(archiveDir.getAbsolutePath()).andReturn(
-        "/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(archiveDir.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}").anyTimes();
+    }
+    else {
+      expect(archiveDir.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
+    }
 
     Capture<ViewEntity> viewEntityCapture = new Capture<ViewEntity>();
-    expect(viewExtractor.ensureExtractedArchiveDirectory("/var/lib/ambari-server/resources/views/work")).andReturn(true);
+    if (System.getProperty("os.name").contains("Windows")) {
+      expect(viewExtractor.ensureExtractedArchiveDirectory("\\var\\lib\\ambari-server\\resources\\views\\work")).andReturn(true);
+    }
+    else {
+      expect(viewExtractor.ensureExtractedArchiveDirectory("/var/lib/ambari-server/resources/views/work")).andReturn(true);
+    }
     expect(viewExtractor.extractViewArchive(capture(viewEntityCapture), eq(viewArchive), eq(archiveDir))).andReturn(null);
 
     // replay mocks
@@ -1100,8 +1178,14 @@ public class ViewRegistryTest {
 
     TestViewArchiveUtility archiveUtility = new TestViewArchiveUtility(viewConfigs, files, outputStreams, jarFiles);
 
-    Assert.assertTrue(ViewRegistry.extractViewArchive("/var/lib/ambari-server/resources/views/my_view-1.0.0.jar",
-        viewExtractor, archiveUtility, configuration, true));
+    if (System.getProperty("os.name").contains("Windows")) {
+      Assert.assertTrue(ViewRegistry.extractViewArchive("\\var\\lib\\ambari-server\\resources\\views\\my_view-1.0.0.jar",
+              viewExtractor, archiveUtility, configuration, true));
+    }
+    else {
+      Assert.assertTrue(ViewRegistry.extractViewArchive("/var/lib/ambari-server/resources/views/my_view-1.0.0.jar",
+              viewExtractor, archiveUtility, configuration, true));
+    }
 
     // verify mocks
     verify(configuration, viewDir, extractedArchiveDir, viewArchive, archiveDir, entryFile, classesDir,

http://git-wip-us.apache.org/repos/asf/ambari/blob/498a13ba/ambari-server/src/test/resources/os_family.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/os_family.json b/ambari-server/src/test/resources/os_family.json
index 3cf0fed..df55b61 100644
--- a/ambari-server/src/test/resources/os_family.json
+++ b/ambari-server/src/test/resources/os_family.json
@@ -30,5 +30,16 @@
     "versions": [
       11
     ]
+  },
+  "winsrv": {
+    "distro": [
+      "win2008server",
+      "win2008serverr2",
+      "win2012server",
+      "win2012serverr2"
+    ],
+    "versions": [
+      6
+    ]
   }
 }