@Test
public void testUpgradeStack() throws Exception {

  StackUpgradeUtil stackUpgradeUtil = injector.getInstance(StackUpgradeUtil.class);
  String stackName = "HDP";
  String stackVersion = "1.3.0";
  String localRepoUrl = "http://foo.bar";
  // check updating all
  stackUpgradeUtil.updateLocalRepo(stackName, stackVersion, localRepoUrl, null, null);
  MetainfoDAO dao = injector.getInstance(MetainfoDAO.class);
  Collection<MetainfoEntity> entities = dao.findAll();
  Assert.assertTrue(entities.size() > 0);
  for (MetainfoEntity entity : entities) {
    Assert.assertTrue(entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/"));
    Assert.assertEquals(localRepoUrl, entity.getMetainfoValue());
  }
  reset (stackName, stackVersion);
  entities = dao.findAll();
  Assert.assertEquals(0, entities.size());
  // check updating only centos6
  stackUpgradeUtil.updateLocalRepo(stackName, stackVersion, localRepoUrl, "centos6", null);
  entities = dao.findAll();
  for (MetainfoEntity entity : entities) {
    Assert.assertTrue(entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/centos6") ||
        entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/redhat6"));
    Assert.assertEquals(localRepoUrl, entity.getMetainfoValue());
  }
  reset (stackName, stackVersion);
  entities = dao.findAll();
  Assert.assertTrue(0 == entities.size());
  // check updating only centos6 and centos5
  stackUpgradeUtil.updateLocalRepo(stackName, stackVersion, localRepoUrl, "centos6,centos5", null);
  entities = dao.findAll();
  for (MetainfoEntity entity : entities) {
    Assert.assertTrue(entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/centos6") ||
        entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/redhat6") ||
        entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/redhat5") ||
        entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/centos5"));
    Assert.assertEquals(localRepoUrl, entity.getMetainfoValue());
  }
  // verify that a change to centos6 also changes redhat6
  localRepoUrl = "http://newfoo.bar";
  stackUpgradeUtil.updateLocalRepo(stackName, stackVersion, localRepoUrl, "centos6", null);
  entities = dao.findAll();
  boolean foundCentos6 = false;
  boolean foundRedhat6 = false;
  for (MetainfoEntity entity : entities) {
    if (-1 != entity.getMetainfoName().indexOf("centos6")) {
      foundCentos6 = true;
      Assert.assertEquals(localRepoUrl, entity.getMetainfoValue());
    } else if (-1 != entity.getMetainfoName().indexOf("redhat6")) {
      foundRedhat6 = true;
      Assert.assertEquals(localRepoUrl, entity.getMetainfoValue());
    } else {
      Assert.assertFalse(localRepoUrl.equals(entity.getMetainfoValue()));
    }
  }
  Assert.assertTrue(foundCentos6);
  Assert.assertTrue(foundRedhat6);
}