def test_delete(stc):
    plLogger = PLLogger.GetLogger('methodology')
    plLogger.LogInfo("test_delete.begin")

    ctor = CScriptableCreator()
    hnd_reg = CHandleRegistry.Instance()

    meth_key = "UNITTEST_DEL"
    UnitTestUtils.create_fake_installed_test_meth(meth_key, [])

    UnitTestUtils.add_fake_test_case(meth_key, [], meth_key + "-1")
    UnitTestUtils.add_fake_test_case(meth_key, [], meth_key + "-2")

    # Update the BLL objects
    meth_man_utils.build_test_methodology_manager(use_txml=True)

    meth_handle = UnitTestUtils.get_methodology_handle(meth_key)
    assert meth_handle
    meth_obj = hnd_reg.Find(meth_handle)
    assert meth_obj is not None

    tc_obj_list = meth_obj.GetObjects("StmTestCase")
    assert len(tc_obj_list) == 2
    tc_obj1 = None
    tc_obj2 = None
    for tc_obj in tc_obj_list:
        if tc_obj.Get("TestCaseKey") == meth_key + "-1":
            tc_obj1 = tc_obj
        elif tc_obj.Get("TestCaseKey") == meth_key + "-2":
            tc_obj2 = tc_obj
    assert tc_obj1
    tc_obj1_path = tc_obj1.Get("Path")
    assert tc_obj2
    tc_obj2_path = tc_obj2.Get("Path")

    # Delete an installed test case
    cmd = ctor.CreateCommand(PKG + ".DeleteTestCaseCommand")
    cmd.Set("StmTestCase", tc_obj2.GetObjectHandle())
    cmd.Execute()
    cmd.MarkDelete()

    # Check the path
    assert os.path.exists(tc_obj1_path)
    assert not os.path.exists(tc_obj2_path)

    # Delete installed test methodology
    cmd = ctor.CreateCommand(PKG + ".DeleteMethodologyCommand")
    cmd.Set("StmMethodology", meth_obj.GetObjectHandle())
    cmd.Execute()
    cmd.MarkDelete()

    stc_sys = CStcSystem.Instance()
    common_data_path = stc_sys.GetApplicationCommonDataPath()
    install_dir = os.path.join(common_data_path, mgr_const.MM_TEST_METH_DIR)
    test_meth_dir = os.path.join(install_dir, meth_key)

    assert os.path.exists(test_meth_dir) is False
    plLogger.LogInfo("test_delete.end")
def test_create_new_testcase(stc):
    plLogger = PLLogger.GetLogger('methodology')
    plLogger.LogInfo("test_create_new_testcase")

    # Test empty meth key
    err_msg, tc_key, tc_obj_hnd = meth_man_utils.create_new_testcase("", "")
    assert err_msg == "Methodology key appears to be invalid."
    assert tc_key is None
    assert tc_obj_hnd is None

    # Create a fresh copy of the UnitTestMeth methodology...
    meth_man_utils.methodology_rmdir("UnitTestMeth")
    meth_path = meth_man_utils.methodology_mkdir("UnitTestMeth")
    UnitTestUtils.create_fake_installed_test_meth("UnitTestMeth", [])
    meth_man_utils.build_test_methodology(meth_path, True)

    err_msg, tc_key, tc_obj_hnd = meth_man_utils.create_new_testcase("UnitTestMeth", "tcx")
    assert err_msg == ""
    assert tc_key is not None
    assert tc_obj_hnd is not None

    # Clean up...
    meth_man_utils.methodology_rmdir("UnitTestMeth")
    return
def test_delete_with_active_testcase(stc):
    plLogger = PLLogger.GetLogger('methodology')
    plLogger.LogInfo("test_delete_active_test.begin")

    ctor = CScriptableCreator()
    hnd_reg = CHandleRegistry.Instance()

    meth_key = "UNITTEST_DEL"
    UnitTestUtils.create_fake_installed_test_meth(meth_key, [])
    UnitTestUtils.add_fake_test_case(meth_key, [], meth_key + "-1")

    # Update the BLL objects
    meth_man_utils.build_test_methodology_manager(use_txml=True)
    meth_man = meth_man_utils.get_meth_manager()

    meth_handle = UnitTestUtils.get_methodology_handle(meth_key)
    assert meth_handle
    meth_obj = hnd_reg.Find(meth_handle)
    assert meth_obj is not None
    meth_path = meth_obj.Get("Path")
    assert os.path.exists(meth_path)

    tc_obj = meth_obj.GetObject("StmTestCase")
    assert tc_obj
    tc_path = tc_obj.Get("Path")
    assert os.path.exists(tc_path)

    # Set up the test case to look as if it were active
    # Set the active test case
    meth_man_utils.set_active_test_case(tc_obj)

    # Create the results object and set its status
    res_obj = ctor.Create("StmTestResult", tc_obj)
    status_dict = {"execStatus": "running",
                   "verdict": "created",
                   "verdictExplanation": "Not Defined"}
    res_obj.Set("Status", json.dumps(status_dict))

    # Try to delete the methodology
    cmd = ctor.CreateCommand(PKG + ".DeleteMethodologyCommand")
    cmd.Set("StmMethodology", meth_obj.GetObjectHandle())
    cmd.Execute()
    assert cmd.Get("PassFailState") == "FAILED"
    cmd.MarkDelete()

    # Check the bll objects
    found_hnd = False
    for meth in meth_man.GetObjects("StmMethodology"):
        if meth.GetObjectHandle() == meth_handle:
            found_hnd = True
            break
    assert found_hnd

    # Check the active test case
    assert meth_man_utils.get_active_test_case().GetObjectHandle() == \
        tc_obj.GetObjectHandle()

    # Check the path
    assert os.path.exists(tc_path)
    assert os.path.exists(meth_path)

    # Set the testcase to completed
    status_dict = {"execStatus": "completed",
                   "verdict": "created",
                   "verdictExplanation": "Not Defined"}
    res_obj.Set("Status", json.dumps(status_dict))

    # Try to delete the methodology
    cmd = ctor.CreateCommand(PKG + ".DeleteMethodologyCommand")
    cmd.Set("StmMethodology", meth_obj.GetObjectHandle())
    cmd.Execute()
    assert cmd.Get("PassFailState") == "PASSED"
    cmd.MarkDelete()

    # Check the bll objects
    found_hnd = False
    for meth in meth_man.GetObjects("StmMethodology"):
        if meth.GetObjectHandle() == meth_handle:
            found_hnd = True
            break
    assert not found_hnd

    # Check the active test case
    assert meth_man_utils.get_active_test_case() is None

    # Check the path
    assert not os.path.exists(meth_path)
    assert not os.path.exists(tc_path)

    stc_sys = CStcSystem.Instance()
    common_data_path = stc_sys.GetApplicationCommonDataPath()
    install_dir = os.path.join(common_data_path, mgr_const.MM_TEST_METH_DIR)
    test_meth_dir = os.path.join(install_dir, meth_key)

    assert os.path.exists(test_meth_dir) is False
    plLogger.LogInfo("test_delete_active_test.end")
    def test_GetAllTestMethodologiesCommand(self, stc):
        ctor = CScriptableCreator()
        hnd_reg = CHandleRegistry.Instance()
        plLogger = PLLogger.GetLogger('methodology')
        plLogger.LogInfo("begin.test_GetAllTestMethodologiesCommand")

        test_pkg1 = "UNITTEST_GETALL1"
        test_pkg2 = "UNITTEST_GETALL2"
        test_pkg3 = "UNITTEST_GETALL3"
        UnitTestUtils.create_fake_installed_test_meth(test_pkg1, [])
        UnitTestUtils.create_fake_installed_test_meth(test_pkg2, [])
        UnitTestUtils.create_fake_installed_test_meth(test_pkg3, [])

        UnitTestUtils.add_fake_test_case(test_pkg1, [], "UNITTEST_GETALL1-1")
        UnitTestUtils.add_fake_test_case(test_pkg1, [], "UNITTEST_GETALL1-2")
        UnitTestUtils.add_fake_test_case(test_pkg1, [], "UNITTEST_GETALL1-3")

        UnitTestUtils.add_fake_test_case(test_pkg3, [], "UNITTEST_GETALL3-1")

        # Manually update TestMethodologyManager
        cmd = ctor.CreateCommand(PKG + ".UpdateTestMethodologyManagerCommand")
        cmd.Execute()
        cmd.MarkDelete()

        # Get all installed test methodologies
        list_cmd = ctor.CreateCommand(PKG + ".GetAllTestMethodologiesCommand")
        list_cmd.Execute()
        test_meth_handle_list = list_cmd.GetCollection("StmMethodologyList")
        list_cmd.MarkDelete()

        meth_key_list = []
        meth_obj1 = None
        meth_obj2 = None
        meth_obj3 = None
        for meth_handle in test_meth_handle_list:
            meth_obj = hnd_reg.Find(meth_handle)
            assert meth_obj is not None
            meth_key = meth_obj.Get("MethodologyKey")
            if meth_key == test_pkg1:
                meth_obj1 = meth_obj
            elif meth_key == test_pkg2:
                meth_obj2 = meth_obj
            elif meth_key == test_pkg3:
                meth_obj3 = meth_obj
        assert meth_obj1 is not None
        assert meth_obj2 is not None
        assert meth_obj3 is not None

        cmd = ctor.CreateCommand(PKG + ".DeleteMethodologyCommand")
        cmd.Set("StmMethodology", meth_obj1.GetObjectHandle())
        cmd.Execute()
        cmd.MarkDelete()
        cmd = ctor.CreateCommand(PKG + ".DeleteMethodologyCommand")
        cmd.Set("StmMethodology", meth_obj2.GetObjectHandle())
        cmd.Execute()
        cmd.MarkDelete()
        cmd = ctor.CreateCommand(PKG + ".DeleteMethodologyCommand")
        cmd.Set("StmMethodology", meth_obj3.GetObjectHandle())
        cmd.Execute()
        cmd.MarkDelete()

        # Manually update TestMethodologyManager
        cmd = ctor.CreateCommand(PKG + ".UpdateTestMethodologyManagerCommand")
        cmd.Execute()
        cmd.MarkDelete()

        # Get all installed test methodologies
        list_cmd = ctor.CreateCommand(PKG + ".GetAllTestMethodologiesCommand")
        list_cmd.Execute()
        test_meth_handle_list = list_cmd.GetCollection("StmMethodologyList")
        list_cmd.MarkDelete()

        meth_key_list = []
        for meth_handle in test_meth_handle_list:
            meth_obj = hnd_reg.Find(meth_handle)
            meth_key_list.append(meth_obj.Get("MethodologyKey"))
        assert test_pkg1 not in meth_key_list
        assert test_pkg2 not in meth_key_list
        assert test_pkg3 not in meth_key_list
        list_cmd.MarkDelete()
        plLogger.LogInfo("end.test_GetAllTestMethodologiesCommand")
def test_UpdateMethodologyManagerCommand(stc):
    ctor = CScriptableCreator()
    stc_sys = CStcSystem.Instance()
    plLogger = PLLogger.GetLogger('methodology')
    plLogger.LogInfo("test_UpdateMethodologyManagerCommand")

    test_pkg1 = "test_meth_1"
    test_pkg2 = "test_meth_2"
    test_pkg3 = "test_meth_3"
    label_list1 = ["benchmarking", "BGP", "CSMP"]
    label_list2 = ["OTV", "DHCPv6"]
    label_list3 = []

    # Clean up empty folders (if existing)
    meth_man_utils.methodology_rmdir(test_pkg1)
    meth_man_utils.methodology_rmdir(test_pkg2)
    meth_man_utils.methodology_rmdir(test_pkg3)

    UnitTestUtils.create_fake_installed_test_meth(test_pkg1, label_list1)
    UnitTestUtils.create_fake_installed_test_meth(test_pkg2, label_list2)
    UnitTestUtils.create_fake_installed_test_meth(test_pkg3, label_list3)

    # TODO: Uncomment the test case stuff once it's fixed.
    # UnitTestUtils.add_fake_test_case(test_pkg1, "test_case_1")
    # UnitTestUtils.add_fake_test_case(test_pkg1, "test_case_2")
    # UnitTestUtils.add_fake_test_case(test_pkg1, "test_case_3")

    # UnitTestUtils.add_fake_test_case(test_pkg3, "test_case_1")

    # Initialize the methodology manager by calling update
    cmd = ctor.CreateCommand(PKG_MGR + ".UpdateTestMethodologyManagerCommand")
    cmd.Execute()
    cmd.MarkDelete()

    meth_manager = meth_man_utils.get_meth_manager()

    test_meth_obj_list = meth_manager.GetObjects("StmMethodology")
    assert len(test_meth_obj_list) > 0

    meth1 = None
    meth2 = None
    meth3 = None
    for test_meth_obj in test_meth_obj_list:
        meth_key = test_meth_obj.Get("MethodologyKey")
        plLogger.LogInfo("meth_name: " + test_meth_obj.Get("Name"))
        plLogger.LogInfo("meth_key: " + test_meth_obj.Get("MethodologyKey"))
        # test_case_list = []
        label_list = []
        if meth_key == test_pkg1:
            meth1 = test_meth_obj
            # test_case_list = ["test_case_1", "test_case_2",
            #                   "test_case_3", "original"]
            label_list = label_list1
        elif meth_key == test_pkg2:
            meth2 = test_meth_obj
            # test_case_list = ["original"]
            label_list = label_list2
        elif meth_key == test_pkg3:
            meth3 = test_meth_obj
            # test_case_list = ["original", "test_case_1"]
            label_list = label_list3
        else:
            # No need to check this...anything here could be
            # from another unit test or other installed methodologies.
            continue

        # Check the path
        install_dir = os.path.join(stc_sys.GetApplicationCommonDataPath(),
                                   mgr_const.MM_TEST_METH_DIR)
        exp_path = os.path.join(install_dir, meth_key)
        assert test_meth_obj.Get("Path") == os.path.normpath(exp_path)

        # Check the test cases
        # if len(test_case_list) > 0:
        #     test_case_obj_list = test_meth_obj.GetObjects("StmTestCase")
        #     for test_case_obj in test_case_obj_list:
        #         test_case_name = test_case_obj.Get("TestCaseName")
        #         assert test_case_name in test_case_list
        #         test_case_list.remove(test_case_name)
        #     assert len(test_case_list) == 0

        # Check the labels
        exp_label_list = test_meth_obj.GetCollection("LabelList")
        plLogger.LogInfo("exp_label_list: " + str(exp_label_list))
        plLogger.LogInfo("act_label_list: " + str(label_list))
        assert len(label_list) == len(exp_label_list)
        if len(exp_label_list) > 0:
            for label in label_list:
                plLogger.LogInfo("  -> looking for label: " + str(label))
                assert label in exp_label_list

    assert meth1 is not None
    assert meth2 is not None
    assert meth3 is not None

    # Clean up
    cmd = ctor.CreateCommand(PKG_MGR + ".DeleteMethodologyCommand")
    cmd.Set("StmMethodology", meth1.GetObjectHandle())
    cmd.Execute()
    cmd = ctor.CreateCommand(PKG_MGR + ".DeleteMethodologyCommand")
    cmd.Set("StmMethodology", meth2.GetObjectHandle())
    cmd.Execute()
    cmd = ctor.CreateCommand(PKG_MGR + ".DeleteMethodologyCommand")
    cmd.Set("StmMethodology", meth3.GetObjectHandle())
    cmd.Execute()