示例#1
0
def SetupCluster(rapi_user):
    """Initializes the cluster.

  @param rapi_user: Login user for RAPI
  @return: Login secret for RAPI

  """
    rapi_secret = utils.GenerateSecret()
    RunTestIf("create-cluster", qa_cluster.TestClusterInit, rapi_user,
              rapi_secret)
    if not qa_config.TestEnabled("create-cluster"):
        # If the cluster is already in place, we assume that exclusive-storage is
        # already set according to the configuration
        qa_config.SetExclusiveStorage(qa_config.get("exclusive-storage",
                                                    False))
        if qa_rapi.Enabled():
            # To support RAPI on an existing cluster we have to find out the secret
            rapi_secret = qa_rapi.LookupRapiSecret(rapi_user)

    qa_group.ConfigureGroups()

    # Test on empty cluster
    RunTestIf("node-list", qa_node.TestNodeList)
    RunTestIf("instance-list", qa_instance.TestInstanceList)
    RunTestIf("job-list", qa_job.TestJobList)

    RunTestIf("create-cluster", qa_node.TestNodeAddAll)
    if not qa_config.TestEnabled("create-cluster"):
        # consider the nodes are already there
        qa_node.MarkNodeAddedAll()

    RunTestIf("test-jobqueue", qa_cluster.TestJobqueue)
    RunTestIf("test-jobqueue", qa_job.TestJobCancellation)

    # enable the watcher (unconditionally)
    RunTest(qa_daemon.TestResumeWatcher)

    RunTestIf("node-list", qa_node.TestNodeList)

    # Test listing fields
    RunTestIf("node-list", qa_node.TestNodeListFields)
    RunTestIf("instance-list", qa_instance.TestInstanceListFields)
    RunTestIf("job-list", qa_job.TestJobListFields)
    RunTestIf("instance-export", qa_instance.TestBackupListFields)

    RunTestIf("node-info", qa_node.TestNodeInfo)

    return rapi_secret
示例#2
0
def _TestTags(kind, name):
    """Generic function for add-tags.

  """
    def cmdfn(subcmd):
        cmd = [_KIND_TO_COMMAND[kind], subcmd]

        if kind != constants.TAG_CLUSTER:
            cmd.append(name)

        return cmd

    for cmd in [
            cmdfn("add-tags") + _TEMP_TAG_NAMES,
            cmdfn("list-tags"),
        ["gnt-cluster", "search-tags", _TEMP_TAG_RE],
            cmdfn("remove-tags") + _TEMP_TAG_NAMES,
    ]:
        AssertCommand(cmd)

    if qa_rapi.Enabled():
        qa_rapi.TestTags(kind, name, _TEMP_TAG_NAMES)
示例#3
0
def RunQa():
    """Main QA body.

  """
    RunTestBlock(RunEnvTests)
    SetupCluster()

    RunTestBlock(RunClusterTests)
    RunTestBlock(RunOsTests)

    RunTestIf("tags", qa_tags.TestClusterTags)

    RunTestBlock(RunCommonNodeTests)
    RunTestBlock(RunGroupListTests)
    RunTestBlock(RunGroupRwTests)
    RunTestBlock(RunNetworkTests)
    RunTestBlock(RunFilterTests)

    # The master shouldn't be readded or put offline; "delay" needs a non-master
    # node to test
    pnode = qa_config.AcquireNode(exclude=qa_config.GetMasterNode())
    try:
        RunTestIf("node-readd", qa_node.TestNodeReadd, pnode)
        RunTestIf("node-modify", qa_node.TestNodeModify, pnode)
        RunTestIf("delay", qa_cluster.TestDelay, pnode)
    finally:
        pnode.Release()

    # Make sure the cluster is clean before running instance tests
    qa_cluster.AssertClusterVerify()

    pnode = qa_config.AcquireNode()
    try:
        RunTestIf("tags", qa_tags.TestNodeTags, pnode)

        if qa_rapi.Enabled():
            RunTest(qa_rapi.TestNode, pnode)

            if (qa_config.TestEnabled("instance-add-plain-disk")
                    and qa_config.IsTemplateSupported(constants.DT_PLAIN)):
                # Normal instance allocation via RAPI
                for use_client in [True, False]:
                    rapi_instance = RunTest(qa_rapi.TestRapiInstanceAdd, pnode,
                                            use_client)
                    try:
                        if qa_config.TestEnabled(
                                "instance-plain-rapi-common-tests"):
                            RunCommonInstanceTests(rapi_instance, [pnode])
                        RunTest(qa_rapi.TestRapiInstanceRemove, rapi_instance,
                                use_client)
                    finally:
                        rapi_instance.Release()
                    del rapi_instance

                # Multi-instance allocation
                rapi_instance_one, rapi_instance_two = \
                  RunTest(qa_rapi.TestRapiInstanceMultiAlloc, pnode)

                try:
                    RunTest(qa_rapi.TestRapiInstanceRemove, rapi_instance_one,
                            True)
                    RunTest(qa_rapi.TestRapiInstanceRemove, rapi_instance_two,
                            True)
                finally:
                    rapi_instance_one.Release()
                    rapi_instance_two.Release()
    finally:
        pnode.Release()

    config_list = [
        ("default-instance-tests", lambda: None, lambda _: None),
        (IsExclusiveStorageInstanceTestEnabled,
         lambda: qa_cluster.TestSetExclStorCluster(True),
         qa_cluster.TestSetExclStorCluster),
    ]
    for (conf_name, setup_conf_f, restore_conf_f) in config_list:
        if qa_config.TestEnabled(conf_name):
            oldconf = setup_conf_f()
            RunTestBlock(RunInstanceTests)
            restore_conf_f(oldconf)

    pnode = qa_config.AcquireNode()
    try:
        if qa_config.TestEnabled(
            ["instance-add-plain-disk", "instance-export"]):
            for shutdown in [False, True]:
                instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk,
                                   [pnode])
                try:
                    expnode = qa_config.AcquireNode(exclude=pnode)
                    try:
                        if shutdown:
                            # Stop instance before exporting and removing it
                            RunTest(qa_instance.TestInstanceShutdown, instance)
                        RunTest(qa_instance.TestInstanceExportWithRemove,
                                instance, expnode)
                        RunTest(qa_instance.TestBackupList, expnode)
                    finally:
                        expnode.Release()
                finally:
                    instance.Release()
                del expnode
                del instance
            qa_cluster.AssertClusterVerify()

    finally:
        pnode.Release()

    if qa_rapi.Enabled():
        RunTestIf("filters", qa_rapi.TestFilters)

    RunTestIf("cluster-upgrade", qa_cluster.TestUpgrade)

    RunTestBlock(RunExclusiveStorageTests)
    RunTestIf(["cluster-instance-policy", "instance-add-plain-disk"],
              TestIPolicyPlainInstance)

    RunTestBlock(RunCustomSshPortTests)

    RunTestIf("instance-add-restricted-by-disktemplates",
              qa_instance.TestInstanceCreationRestrictedByDiskTemplates)

    # Test removing instance with offline drbd secondary
    if qa_config.TestEnabled(
        ["instance-remove-drbd-offline", "instance-add-drbd-disk"]):
        # Make sure the master is not put offline
        snode = qa_config.AcquireNode(exclude=qa_config.GetMasterNode())
        try:
            pnode = qa_config.AcquireNode(exclude=snode)
            try:
                instance = qa_instance.TestInstanceAddWithDrbdDisk(
                    [pnode, snode])
                set_offline = lambda node: qa_node.MakeNodeOffline(node, "yes")
                set_online = lambda node: qa_node.MakeNodeOffline(node, "no")
                RunTest(qa_instance.TestRemoveInstanceOfflineNode, instance,
                        snode, set_offline, set_online)
            finally:
                pnode.Release()
        finally:
            snode.Release()
        qa_cluster.AssertClusterVerify()

    RunTestBlock(RunMonitoringTests)

    RunPerformanceTests()

    RunTestIf("cluster-destroy", qa_node.TestNodeRemoveAll)

    RunTestIf("cluster-destroy", qa_cluster.TestClusterDestroy)