def doit(cfg, printflg=False):
    try:
        start_time = time.time()
        set_errorlogging()
        rc = doit_wrapper(cfg, printflg)
        end_time = time.time()
        updatevalue = updatetimsresultsjson(cfg, start_time, end_time, rc, 'feature')
        return updatevalue
    except:
        print  "Error Occurred in Script \n"
        PrintException()
        return (1)
def doit(cfg, printflg=False):
    """
        The function which actually invokes the test case
    """

    try:
        start_time = time.time()
        set_errorlogging()
        rc = doit_wrapper(cfg, printflg)
        end_time = time.time()
        update_value = updatetimsresultsjson(cfg, start_time, end_time, rc,
                                             'big_red_button')
        return update_value
    except:
        print "Error Occurred in script \n"
        PrintException()
        return 1
def doit_wrapper(cfg, printflg=False):
    """
    Core Functionality of Testcase start with this function
    """

    message = ""
    status = 3
    testcase_id = "TC9668"
    userstory_id = "US80008"
    tims_dict = {
        testcase_id: [userstory_id, message, status],
    }

    try:
        # announce
        script_name = os.path.basename(__file__)
        (test, ext) = os.path.splitext(script_name)
        print "Starting test " + test

        if "no_brb" in cfg["test-flags"]:
            message = "Testcase Skipped: Skipping the testcases since no_brb flag is enabled."
            print message
            tims_dict = update_tims_data(tims_dict, 2, message, [testcase_id])
            return tims_dict

        # Initialize the Variables
        serviceidlist = []
        timeout = 6

        # Channel Details
        # available_channels = cfg['big_red_button']
        available_channels = cfg['cornercase-channelsets']['set1']
        channel1 = cfg['test_channels'][available_channels[0]]['ServiceId']
        serviceidlist.append(unicode(channel1))

        # Planner details
        prefix = cfg['feature']['household_prefix']
        plannerlimit = cfg['feature']['households_needed']
        index = random.randint(0, plannerlimit - 1)
        planner_id = prefix + str(index)

        # Delay
        recordingstatecheck_waittime = cfg['pps']['booked_to_recording_delay']
        recordedstatecheck_waittime = cfg['pps']['recording_to_recorded_delay']

        cmdc_hosts = [cfg['cmdc']['host']]
        pps_hosts = [cfg['pps']['host']]
        print "\n# STEP1: Set copyType UniqueCopy in PPS and Ingest a event of n minutes #\n"
        householdid1 = prefix + '1'
        householdid2 = prefix + '2'
        householdid_list = [householdid1, householdid2]
        hostlist = list(itertools.product(cmdc_hosts, pps_hosts))
        print "hostlist ", hostlist

        ci_host = cfg['ci']['host']
        ci_port = cfg['ci']['port']

        ingest_minimum_delay = cfg['ci']['ingest_minimum_delay']
        # ingest_delay_factor_per_minute = cfg['ci']['ingest_delay_factor_per_minute']
        post_time = time.time() + ingest_minimum_delay + 120
        timeslotinminutes = cfg['test_channels']['mediumProgramLength']
        channel = ChannelLineup(BoundaryInMinutes=0)
        eventtitle1 = "random1cp" + str(random.randint(1, 499))
        channel.add_to_lineup(serviceId=channel1,
                              timeSlotLengthMinutes=timeslotinminutes,
                              timeSlotCount=1,
                              programIDPrefix=eventtitle1)
        channel.postXmlData(ci_host, ci_port, startTime=post_time)
        channel.writeXmlFiles(startTime=post_time)
        length = channel.getTotalLength()
        print "length ", length
        print channel
        time.sleep(ingest_minimum_delay)

    except:
        message = (
            "Test Case Failed: Error Occurred in configuration {0}".format(
                PrintException(True)))
        print message
        tims_dict = update_tims_data(tims_dict, 1, message, [testcase_id])
        return tims_dict

    try:
        # Do PPS Booking
        pps_headers = {
            'Content-Type': 'application/json',
            'Source-Type': 'WEB',
            'Source-ID': '127.0.0.1',
        }

        catalogueId = cfg['catalogueId']
        protocol = cfg['protocol']
        region = cfg['region']
        pps_port = cfg['pps']['port']
        port_cmdc = cfg['cmdc']['port']

        cmdc_host = hostlist[0][0]
        pps_host = hostlist[0][1]

        rec_region = cfg['recorderRegion']
        reg_src = cfg['recorderRegion']
        reg_dest = cfg['recorderRegion']
        res_copy_type = "NoChange"

        print "\n# STEP2: Update SRT for that stream to common copyType #\n"
        configureSRT_instance = ConfigureSRT()
        configureSRT_instance.modify_srt(
            cfg, [[rec_region, str(channel1), rec_region, "common"]])

        for householdid in householdid_list:
            cleanup_household(cfg, pps_port, protocol, pps_host, householdid,
                              pps_headers, timeout)

        grid_response = fetch_gridRequest(catalogueId,
                                          protocol,
                                          cmdc_host,
                                          port_cmdc,
                                          serviceidlist,
                                          region,
                                          timeout,
                                          printflg=False)
        message = "Unable to fetch grid response"
        assert grid_response, message

        evts_content_id_list = []
        start_time_list = []
        end_time_list = []
        if grid_response:
            print grid_response.content
            cont_id_dict_chl1 = get_contentIddict_bytitle(
                grid_response, eventtitle1, ['title'])
            print "cont_id_dict_chl1 ", cont_id_dict_chl1
            if cont_id_dict_chl1:
                event_cont_id_list_ch1 = sorted(cont_id_dict_chl1.items(),
                                                key=lambda x: x[1])
                print "event_cont_id_list_ch1 ", event_cont_id_list_ch1
                if event_cont_id_list_ch1:
                    ev1_content_id = event_cont_id_list_ch1[0][0]
                    start_time_list.append(event_cont_id_list_ch1[0][1][0])
                    end_time_list.append(event_cont_id_list_ch1[0][1][1])
                    evts_content_id_list.append(ev1_content_id)
                    payload1 = """{
                       "checkConflicts": true,
                       "pvr": "nPVR",
                       "scheduleInstanceId": "%s"
                       }""" % (ev1_content_id)

        print "\n# STEP3: Book the event from 2 households and verify booking successful #\n"
        result, response = do_PPSbooking_returnresponse(
            pps_port, protocol, pps_host, householdid1, pps_headers, payload1,
            evts_content_id_list[0], timeout, printflg)
        message = "Unable to verify PPS booking"
        assert result == "PASS", message
        print "response ", response
        print "result ", result
        print "response content ", response.content
        bookedcatalogresponse = fetch_bookingCatalog(pps_port, protocol,
                                                     pps_host, householdid1,
                                                     timeout)
        message = "Unable to verify booking catalog"
        assert bookedcatalogresponse, message
        print "bookedcatalogresponse ", bookedcatalogresponse
        print "content ", bookedcatalogresponse.content

        result, response = do_PPSbooking_returnresponse(
            pps_port, protocol, pps_host, householdid2, pps_headers, payload1,
            evts_content_id_list[0], timeout, printflg)
        print "response ", response
        print "result ", result
        print "response content ", response.content
        bookedcatalogresponse = fetch_bookingCatalog(pps_port, protocol,
                                                     pps_host, householdid2,
                                                     timeout)
        message = "Unable to verify booking catalog"
        assert bookedcatalogresponse, message
        print "bookedcatalogresponse ", bookedcatalogresponse
        print "content ", bookedcatalogresponse.content

        print "\n# STEP4: Wait till event moving to recording state and verify it #\n"
        program_strttime1 = get_timedifference(start_time_list[0], printflg)
        time.sleep(program_strttime1)
        time.sleep(recordingstatecheck_waittime)

        result, resp = verify_recording_state(pps_port, protocol, pps_host,
                                              householdid1,
                                              evts_content_id_list[0], timeout)
        message = "Unable to verify recording catalog"
        assert result == "PASS", message
        print "result ", result
        print "resp ", resp
        print "resp content ", resp.content

        print(
            "\n# STEP5: Using Playback API verify recording content for"
            " both household is common copy type. #\n")
        for householdid in householdid_list:
            playbackuri_list = get_content_playbackURI(
                pps_host, pps_port, protocol, [
                    evts_content_id_list[0],
                ], [
                    householdid,
                ], timeout)
            print "Playback URI list :", playbackuri_list
            contentidlist = get_contentid_from_recid(cfg, playbackuri_list,
                                                     timeout)
            print "ContentId list :", contentidlist
            vmr_response = get_vmr_response(cfg, contentidlist[0], timeout)
            jsonresponse = json.loads(vmr_response.content)
            print "JSON response :", vmr_response.content
            # VMR Response picked for only one content Id
            # Directly picking the first response content
            resp_dict = jsonresponse[0]
            message = "Unexpectedly! CopyType Still Remains in Unique"
            assert resp_dict["CopyType"] == "COMMON", message

        message = "Testcase Passed: CopyType changes validated"
        tims_dict = update_tims_data(tims_dict, 0, message, [testcase_id])

    except AssertionError as ae:
        message = "Test case Failed:" + str(ae)
        tims_dict = update_tims_data(tims_dict, 1, message, [testcase_id])
        # debug_print(cfg, planner_id)

    except Exception as e:
        message = "Test case Failed: " + str(e)
        tims_dict = update_tims_data(tims_dict, 1, message, [testcase_id])
        # debug_print(cfg, planner_id)

    finally:
        # cleanup_planner(cfg, planner_id)
        print "\n# STEP6: Revert Back planner and SRT to its previous state #\n"
        for householdid in householdid_list:
            cleanup_household(cfg, pps_port, protocol, pps_host, householdid,
                              pps_headers, timeout)
        configureSRT_instance = ConfigureSRT()
        configureSRT_instance.modify_srt(
            cfg, [[reg_src, "*", reg_dest, res_copy_type]])
        print message
        return tims_dict
def doit_wrapper(cfg, printflg=False):
    """
    Core Functionality of Testcase start with this function
    """

    message = ""
    status = 3
    testcase_id = "TC9587"
    userstory_id = "US79253"
    tims_dict = {
        testcase_id: [userstory_id, message, status],
    }

    try:
        # announce
        script_name = os.path.basename(__file__)
        (test, ext) = os.path.splitext(script_name)
        print "Starting test " + test

        if "no_brb" in cfg["test-flags"]:
            message = "Testcase Skipped: Skipping the testcases since no_brb flag is enabled."
            print message
            tims_dict = update_tims_data(tims_dict, 3, message, [testcase_id])
            return tims_dict

        # Initialize the Variables
        serviceidlist = []
        timeout = 6

        # Channel Details
        # available_channels = cfg['big_red_button']
        available_channels = cfg['cornercase-channelsets']['set1']
        channel1 = cfg['test_channels'][available_channels[0]]['ServiceId']
        serviceidlist.append(unicode(channel1))

        # Planner details
        prefix = cfg['corner']['household_prefix']
        plannerlimit = cfg['corner']['households_needed']
        index = random.randint(0, plannerlimit - 1)
        planner_id = prefix + str(index)

        # Delay
        recordingstatecheck_waittime = cfg['pps']['booked_to_recording_delay']
        recordedstatecheck_waittime = cfg['pps']['recording_to_recorded_delay']

        cmdc_hosts = [cfg['cmdc']['host']]
        pps_hosts = [cfg['pps']['host']]

        #householdid1 = prefix + '1'
        #householdid2 = prefix + '2'
        #householdid_list = [householdid1, householdid2]
        hostlist = list(itertools.product(cmdc_hosts, pps_hosts))
        print "hostlist ", hostlist

        ci_host = cfg['ci']['host']
        ci_port = cfg['ci']['port']

        ingest_minimum_delay = cfg['ci']['ingest_minimum_delay']
        # ingest_delay_factor_per_minute = cfg['ci']['ingest_delay_factor_per_minute']
        post_time = time.time() + ingest_minimum_delay + 120
        timeslotinminutes = cfg['test_channels']['mediumProgramLength']
        channel = ChannelLineup(BoundaryInMinutes=0)
        eventtitle1 = "random1cp" + str(random.randint(1, 499))
        channel.add_to_lineup(serviceId=channel1,
                              timeSlotLengthMinutes=timeslotinminutes,
                              timeSlotCount=1,
                              programIDPrefix=eventtitle1)
        channel.postXmlData(ci_host, ci_port, startTime=post_time)
        channel.writeXmlFiles(startTime=post_time)
        length = channel.getTotalLength()
        print "length ", length
        print channel
        time.sleep(ingest_minimum_delay)

    except:
        message = (
            "Test Case Failed: Error Occurred in configuration {0}".format(
                PrintException(True)))
        print message
        tims_dict = update_tims_data(tims_dict, 1, message, [testcase_id])
        return tims_dict

    try:
        # Do PPS Booking
        pps_headers = {
            'Content-Type': 'application/json',
            'Source-Type': 'WEB',
            'Source-ID': '127.0.0.1',
        }

        catalogueId = cfg['catalogueId']
        protocol = cfg['protocol']
        region = cfg['region']
        pps_port = cfg['pps']['port']
        port_cmdc = cfg['cmdc']['port']

        cmdc_host = hostlist[0][0]
        pps_host = hostlist[0][1]

        dest_rec_region = cfg['recorderRegion']
        src_rec_region = "*"
        reg_src = cfg['recorderRegion']
        reg_dest = cfg['recorderRegion']
        res_copy_type = "NoChange"

        print(
            "\n# STEP1: Login into RR and update the static_route_table to record"
            " sourceRegion to * #\n")
        configureSRT_instance = ConfigureSRT()
        configureSRT_instance.modify_srt(
            cfg, [[src_rec_region,
                   str(channel1), dest_rec_region, "unique"]])

        print(
            "\n# STEP2: Get List of Recording Region and create households"
            " with those regions #\n")
        #for householdid in householdid_list:
        #    cleanup_household(
        #        cfg, pps_port, protocol, pps_host, householdid, pps_headers, timeout)

        rr_res, rr_res_cont = configureSRT_instance.get_rr_regions_list(cfg)
        message = "Unable to Fetch RR regions list"
        assert rr_res, message

        reg_list = []
        # rr_res_cont = json.loads(resp.content)
        for regn in rr_res_cont:
            reg_list.append(regn['region'])

        hosts = get_hosts_by_config_type(cfg, 'upm', printflg)
        print "[INFO: ] hosts ", hosts
        # inx_list = []
        householdid_list = []
        for host in hosts:
            for index, regn in enumerate(reg_list):
                print "[INFO: ] index ", index
                print "[INFO: ] regn ", regn
                inx_prefix = "tc9587" + str(index)
                householdid_list.append(prefix + inx_prefix)
                res_status = _create_household(inx_prefix, host, cfg, regn,
                                               prefix)
                print "[INFO: ] res_status ", res_status

        time.sleep(5)
        householdid1 = householdid_list[0]
        householdid2 = householdid_list[1]
        grid_response = fetch_gridRequest(catalogueId,
                                          protocol,
                                          cmdc_host,
                                          port_cmdc,
                                          serviceidlist,
                                          region,
                                          timeout,
                                          printflg=False)
        message = "Unable to fetch grid response"
        assert grid_response, message

        evts_content_id_list = []
        start_time_list = []
        end_time_list = []
        if grid_response:
            print grid_response.content
            cont_id_dict_chl1 = get_contentIddict_bytitle(
                grid_response, eventtitle1, ['title'])
            print "cont_id_dict_chl1 ", cont_id_dict_chl1
            if cont_id_dict_chl1:
                event_cont_id_list_ch1 = sorted(cont_id_dict_chl1.items(),
                                                key=lambda x: x[1])
                print "event_cont_id_list_ch1 ", event_cont_id_list_ch1
                if event_cont_id_list_ch1:
                    ev1_content_id = event_cont_id_list_ch1[0][0]
                    start_time_list.append(event_cont_id_list_ch1[0][1][0])
                    end_time_list.append(event_cont_id_list_ch1[0][1][1])
                    evts_content_id_list.append(ev1_content_id)
                    payload1 = """{
                       "checkConflicts": true,
                       "pvr": "nPVR",
                       "scheduleInstanceId": "%s"
                       }""" % (ev1_content_id)

        print "\n# STEP3: Book a program for 2 minutes (unique copy) in all the households #\n"
        print "[INFO: ] householdid1 ", householdid1
        result, response = do_PPSbooking_returnresponse(
            pps_port, protocol, pps_host, householdid1, pps_headers, payload1,
            evts_content_id_list[0], timeout, printflg)
        message = "Unable to verify PPS booking"
        assert result == "PASS", message
        print "response ", response
        print "result ", result
        print "response content ", response.content
        bookedcatalogresponse = fetch_bookingCatalog(pps_port, protocol,
                                                     pps_host, householdid1,
                                                     timeout)
        message = "Unable to verify booking catalog"
        assert bookedcatalogresponse, message
        print "bookedcatalogresponse ", bookedcatalogresponse
        print "content ", bookedcatalogresponse.content

        result, response = do_PPSbooking_returnresponse(
            pps_port, protocol, pps_host, householdid2, pps_headers, payload1,
            evts_content_id_list[0], timeout, printflg)
        print "response ", response
        print "result ", result
        print "response content ", response.content
        bookedcatalogresponse = fetch_bookingCatalog(pps_port, protocol,
                                                     pps_host, householdid2,
                                                     timeout)
        message = "Unable to verify booking catalog"
        assert bookedcatalogresponse, message
        print "bookedcatalogresponse ", bookedcatalogresponse
        print "content ", bookedcatalogresponse.content

        print(
            "\n# STEP4: Check weather the recording happens successfully or not and then check"
            " the recording type (fanout value), it should to common copy #\n")
        program_strttime1 = get_timedifference(start_time_list[0], printflg)
        print "[INFO: ] recording check wait time ", program_strttime1
        time.sleep(program_strttime1)
        time.sleep(recordingstatecheck_waittime + 50)

        result, resp = verify_recording_state(pps_port, protocol, pps_host,
                                              householdid1,
                                              evts_content_id_list[0], timeout)
        message = "Unable to verify recording catalog"
        assert result == "PASS", message
        print "result ", result
        print "resp ", resp
        print "resp content ", resp.content

        for householdid in householdid_list:
            playbackuri_list = get_content_playbackURI(
                pps_host, pps_port, protocol, [
                    evts_content_id_list[0],
                ], [
                    householdid,
                ], timeout)
            print "Playback URI list :", playbackuri_list
            contentidlist = get_contentid_from_recid(cfg, playbackuri_list,
                                                     timeout)
            print "ContentId list :", contentidlist
            vmr_response = get_vmr_response(cfg, contentidlist[0], timeout)
            jsonresponse = json.loads(vmr_response.content)
            print "JSON response :", vmr_response.content
            # VMR Response picked for only one content Id
            # Directly picking the first response content
            resp_dict = jsonresponse[0]
            message = "Unexpectedly! recording region is not same for different households"
            assert resp_dict["A8UpdateURL"].split(
                "/")[-1] == dest_rec_region, message

        message = "Testcase Passed: video recording happened in same recording region"
        tims_dict = update_tims_data(tims_dict, 0, message, [testcase_id])

    except AssertionError as ae:
        message = "Test case Failed:" + str(ae)
        tims_dict = update_tims_data(tims_dict, 1, message, [testcase_id])

    except Exception as e:
        message = "Test case Failed: " + str(e)
        tims_dict = update_tims_data(tims_dict, 1, message, [testcase_id])

    finally:
        # cleanup_planner(cfg, planner_id)
        configureSRT_instance = ConfigureSRT()
        configureSRT_instance.modify_srt(
            cfg, [[reg_src, "*", reg_dest, res_copy_type]])
        for householdid in householdid_list:
            cleanup_household(cfg, pps_port, protocol, pps_host, householdid,
                              pps_headers, timeout)
        print message
        return tims_dict
def doit_wrapper(cfg, printflg=False):

    message = ""
    status = 3
    test_id = "TC10074"
    tims_dict = {test_id: ["US82822", message, status],}
    print "%s: Big Red Button - Change SRT when recording is ongoing."% (test_id)

    try:
        # announce
        abspath = os.path.abspath(__file__)
        scriptName = os.path.basename(__file__)
        (test, ext) = os.path.splitext(scriptName)
        print "Starting test " + test

        if "no_brb" in cfg["test-flags"]:
            message = "Testcase Skipped: Skipping the testcases since no_brb flag is enabled."
            print message
            tims_dict = update_tims_data(tims_dict, 3, message, [test_id])
            return tims_dict

        #Initialize the Variables
        timeout = 2
        serviceIdlist = []

        # set values based on config
        cmdc_hosts = [cfg['cmdc']['host']]
        pps_hosts = [cfg['pps']['host']]
        cmdc_port = cfg['cmdc']['port']
        pps_port = cfg['pps']['port']
        catalogueId = cfg['catalogueId']
        protocol = cfg['protocol']
        region = cfg['region']

        # Handle if the there are less channels than the threshold.
        threshold_channels = 17
        channelfilter1 = []
        for channels in cfg['test_channels'].keys():
            if channels.startswith("GenericCh"):
                channelfilter1.append(channels)
        if len(channelfilter1) < threshold_channels:
            message = "Skipping this TC since number of channels are less than 17."
            print message
            tims_dict = update_tims_data(tims_dict, 1, message, [test_id])
            return tims_dict

        testchannel1 = cfg['test_channels']['GenericCh1']['ServiceId']
        testchannel2 = cfg['test_channels']['GenericCh2']['ServiceId']

        serviceIdlist.append(unicode(testchannel1))
        serviceIdlist.append(unicode(testchannel2))

        prefix = cfg['feature']['household_prefix']
        fetch_bookingcatalog_delay = cfg['pps']['fetch_bookingCatalog_delay']
        recordingstatecheck_timedelay = cfg['pps']['booked_to_recording_delay']
        householdid1 = prefix + '1'
        householdid2 = prefix + '2'
        householdid3 = prefix + '3'
        householdid4 = prefix + '4'
        householdid_list = [householdid1, householdid2, householdid3, householdid4]
        hostlist = list(itertools.product(cmdc_hosts, pps_hosts))
        broadcasting_starttime = 0
        broadcasting_endtime = 0
        recording_delay = 60
        ingest_delay = 120
        srt_change_delay = 15
        common_copy = "COMMON"
        unique_copy = "UNIQUE"
        source_region = cfg["recorderRegion"]
        dest_region = cfg["recorderRegion"]
        copy_type = unique_copy


        srt_content = [[source_region, "*", dest_region, "unique"],]
        srt_content_change1 = [[source_region, "*", dest_region, "common"],]
        srt_content_change2 = [[],]
        srt_content_change3 = [[source_region, "*", dest_region, "gisak"],]
        srt_content_reset = [[source_region, "*", dest_region, "NoChange"],]
        # configureSRT_instance = ConfigureSRT()
        # configureSRT_instance.set_srt_availability(cfg)
        # configureSRT_instance.rename_srt_file(cfg, "stock_table")
        # time.sleep(5)
        # configureSRT_instance.modify_srt(cfg, srt_content)

        # Do PPS Booking
        pps_headers = {
            'Content-Type': 'application/json',
            'Source-Type': 'WEB',
            'Source-ID': '127.0.0.1',
            }

        ###########################  USER DEFINED POST TIME IN UTC ############################
        start_delay = 5
        timeslotinminutes = cfg["test_channels"]["longProgramLength"]# * 6
        print "[INFO: ] timeslotinminutes ", timeslotinminutes
        ingestion_time = get_utc_time_after_n_minutes(start_delay, True)
        start_time = datetime.datetime.strptime(ingestion_time, '%Y-%m-%dT%H:%M:%S')
        print "[INFO: ] starttime: ", start_time
        post_time = calendar.timegm(start_time.timetuple()) + 0.0001
        print "[INFO: ] post_time ", post_time
        #######################################################################################

        print "### STEP1: Ingest an event of 30 minutes with the posttime of 5 Minutes to the CI Host ######## \n \n"
        ci_host = cfg['ci']['host']
        ci_port = cfg['ci']['port']
        ingest_minimum_delay = cfg['ci']['ingest_minimum_delay']
        ingest_delay_factor_per_minute = cfg['ci']['ingest_delay_factor_per_minute']

        print "[INFO: ] current time : ", datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S')
        eventtitle1 = "commoncp" + str(random.randint(1, 499))

        channel1 = ChannelLineup(BoundaryInMinutes=0)
        channel1.add_to_lineup(serviceId=testchannel1, timeSlotLengthMinutes=timeslotinminutes, timeSlotCount=2, programIDPrefix=eventtitle1)
        channel1.postXmlData(ci_host, ci_port, startTime=post_time)
        channel1.writeXmlFiles(startTime=post_time)

        print "channel1 : ", channel1

        channel2 = ChannelLineup(BoundaryInMinutes=0)
        channel2.add_to_lineup(serviceId=testchannel2, timeSlotLengthMinutes=timeslotinminutes, timeSlotCount=2, programIDPrefix=eventtitle1)
        channel2.postXmlData(ci_host, ci_port, startTime=post_time)
        channel2.writeXmlFiles(startTime=post_time)

        print "channel2 : ", channel2

        print "Wait time for the catalog ingest to get synced with the CI Host in seconds: " + str(ingest_delay)
        time.sleep(ingest_delay)

    except:
        message = "Testcase Failed: Error Occurred in Configuration " + PrintException(True)
        print message
        tims_dict = update_tims_data(tims_dict, 1, message, [test_id])
        return tims_dict

    for (cmdc_host, pps_host) in hostlist:
        try:

            print "### STEP2: Setting the SRT table in such a way to record the contents with unique copy type. ###### \n \n"
            configureSRT_instance = ConfigureSRT()
            configureSRT_instance.set_srt_availability(cfg)
            configureSRT_instance.modify_srt(cfg, srt_content)

            for householdid in householdid_list:
                cleanup_household(cfg, pps_port, protocol, pps_host, householdid, pps_headers, timeout)

            print "### STEP3: Fetching the grid response to collect the ingested content. ##### \n \n"
            gridservicelistresponse = fetch_gridRequest(catalogueId, protocol, \
                      cmdc_host, cmdc_port, serviceIdlist, region, timeout, printflg)
            assert gridservicelistresponse, "Testcase Failed: Unable to Fetch Grid Response"

            contentId_dict_all = get_contentIddict_bytitle(gridservicelistresponse, eventtitle1, ['title'])
            print "ContentID dictionary from the Grid Response\n" + str(contentId_dict_all)
            assert contentId_dict_all, "Testcase Failed: Unable to Form ContentId dictionary from the Grid Response"

            contentId_list = sorted(contentId_dict_all.items(), key=lambda x: x[1])
            #contentId_list = get_contentIdlist_allcontentiddict_channellineup(contentId_dict_all, printflg)
            print "ContentId list after Sorting\n" + str(contentId_list)
            assert (len(contentId_list) > 0), "Testcase Failed: Unable to form ContentId list from ContentId dictionary"
            print "len(contentId_list) : ", len(contentId_list)

            content_ev1 = contentId_list[0][0]
            content_ev2 = contentId_list[1][0]
            content_ev3 = contentId_list[2][0]
            content_ev4 = contentId_list[3][0]
            print "[INFO: ] content_ev1 ", content_ev1
            print "[INFO: ] content_ev2 ", content_ev2
            print "[INFO: ] content_ev3 ", content_ev3
            print "[INFO: ] content_ev4 ", content_ev4

            payload_ev1 = """{
                            "scheduleInstanceId" : "%s",
                            "checkConflicts" : true,
                            "pvr":"nPVR"
                            }""" % (content_ev1)

            payload_ev2 = """{
                            "scheduleInstanceId" : "%s",
                            "checkConflicts" : true,
                            "pvr":"nPVR"
                            }""" % (content_ev2)

            payload_ev3 = """{
                            "scheduleInstanceId" : "%s",
                            "checkConflicts" : true,
                            "pvr":"nPVR"
                            }""" % (content_ev3)

            payload_ev4 = """{
                            "scheduleInstanceId" : "%s",
                            "checkConflicts" : true,
                            "pvr":"nPVR"
                            }""" % (content_ev4)

            print "[INFO: ] current time : ", datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S')
            print "About to start the event 1 booking\n\n"
            print "### STEP4: PPS event-1(on hh1, hh2), event-2(on hh3, hh4) booking respectively from channel 1 & channel 2 is being done. ##### \n \n"
            for householdid in householdid_list[:2]:
                result = do_PPSbooking(pps_port, protocol, pps_host, householdid, pps_headers, payload_ev1, content_ev1, timeout, printflg)
                if result != "PASS":
                    message = "Testcase Failed:Unable to do pps booking of content ID "+str(content_ev1)+" in household "+str(householdid)
                    print message
                    tims_dict = update_tims_data(tims_dict, 1, message, [test_id])

            for householdid in householdid_list[2:]:
                result = do_PPSbooking(pps_port, protocol, pps_host, householdid, pps_headers, payload_ev2, content_ev2, timeout, printflg)
                if result != "PASS":
                    message = "Testcase Failed:Unable to do pps booking of content ID "+str(content_ev1)+" in household "+str(householdid)
                    print message
                    tims_dict = update_tims_data(tims_dict, 1, message, [test_id])

            print "### STEP5: Confirming that hh1, hh2, hh3 & hh4 has the items in booked state. ##### \n \n"
            time.sleep(fetch_bookingcatalog_delay)
            print "[INFO: ] current time : ", datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S')
            # Getting Catalog Response for the Booked Catalog
            for householdid in householdid_list[:2]:
                catalogresult, catalogresponse = verify_booking(pps_port, protocol, pps_host, householdid, content_ev1, timeout)
                print "Booking response :", catalogresult
                if catalogresult == "PASS":
                    jsonresponse = json.loads(catalogresponse.content)
                    for items in jsonresponse:
                        try:
                            if items['scheduleInstance'] == content_ev1:
                                broadcasting_starttime = items['content']['broadcastDateTime']
                                print "[INFO: ] broadcasting_starttime: ", broadcasting_starttime
                                broadcasting_endtime = items['content']['endAvailability']
                                print "[INFO: ] broadcasting_endtime ", broadcasting_endtime
                        except:
                            pass
                else:
                    message = "TestCase  Failed : Content ID "+str(content_ev1)+" in household "+ str(householdid)+ " is not in the BOOKED state"
                    assert False, message

            for householdid in householdid_list[2:]:
                catalogresult, catalogresponse = verify_booking(pps_port, protocol, pps_host, householdid, content_ev2, timeout)
                print "Booking response :", catalogresult
                if catalogresult == "PASS":
                    jsonresponse = json.loads(catalogresponse.content)
                    for items in jsonresponse:
                        try:
                            if items['scheduleInstance'] == content_ev2:
                                broadcasting_starttime = items['content']['broadcastDateTime']
                                broadcasting_endtime = items['content']['endAvailability']
                        except:
                            pass
                else:
                    message = "TestCase  Failed : Content ID "+str(content_ev1)+" in household "+ str(householdid)+ " is not in the BOOKED state"
                    assert False, message

            broadcasting_starttime = timeDiff(broadcasting_starttime)
            recordingstatechage = recordingstatecheck_timedelay + broadcasting_starttime
            print "Script will wait for " + str(recordingstatechage / 60) + " minutes to check the event recording state"
            time.sleep(recordingstatechage)
            print "Waiting additional %s seconds to workaround the state change issue."% (recording_delay)
            time.sleep(recording_delay)

            print "### STEP6: Confirming that all four households has the booked items in recording state. ##### \n \n"
            for householdid in householdid_list[:2]:
                recordingcatalogresult, recordingcatalogresponse = verify_recording_state(pps_port, protocol, pps_host, householdid, content_ev1, timeout)
                if recordingcatalogresult != "PASS":
                    message = "Testcase Failed: Content ID {0} in household {1} is not in the RECORDING state".format(content_ev1, householdid)
                    assert False, message

            for householdid in householdid_list[2:]:
                recordingcatalogresult, recordingcatalogresponse = verify_recording_state(pps_port, protocol, pps_host, householdid, content_ev2, timeout)
                if recordingcatalogresult != "PASS":
                    message = "Testcase Failed: Content ID {0} in household {1} is not in the RECORDING state".format(content_ev1, householdid)
                    assert False, message

            print "### STEP7: Confirming that all households, recording its "\
                       "content with copy type as unique. ##### \n \n"
            #TODO: Verify SRT is being reflected in Riodev.

            playbackuri_list = get_content_playbackURI(pps_host, pps_port, protocol,\
                        [content_ev1], householdid_list[:2], timeout)
            contentidlist = get_contentid_from_recid(cfg, playbackuri_list, timeout)

            vmr_response_1 = get_vmr_response(cfg, contentidlist[0], timeout)
            vmr_response_2 = get_vmr_response(cfg, contentidlist[1], timeout)
            riodev_recording_hh1 = json.loads(vmr_response_1.content)[0]
            riodev_recording_hh2 = json.loads(vmr_response_2.content)[0]
            print "[INFO: ] riodev_recording_hh1 ", riodev_recording_hh1
            print "[INFO: ] riodev_recording_hh2 ", riodev_recording_hh2
            assert riodev_recording_hh1["CopyType"] == copy_type and\
                   riodev_recording_hh2["CopyType"] == copy_type, \
                   "Testcase Failed: Content %s are not in expected copy \
                    type %s in household 1 & household 2."% (content_ev1, copy_type)

            print "\n"*5

            playbackuri_list = get_content_playbackURI(pps_host, pps_port, \
                       protocol, [content_ev2], householdid_list[2:], timeout)
            contentidlist = get_contentid_from_recid(cfg, playbackuri_list, timeout)
            vmr_response_1 = get_vmr_response(cfg, contentidlist[0], timeout)
            riodev_recording_hh3 = json.loads(vmr_response_1.content)[0]
            print "[INFO: ] riodev_recording_hh3 ", riodev_recording_hh3
            assert riodev_recording_hh3["CopyType"] == copy_type, \
                   "Testcase Failed: Content %s are not in expected \
                    copy type %s in household 3."% (content_ev1, copy_type)

            print "### STEP8: Setting the SRT table in such a way to record the "\
                   "contents with common copy type. ###### \n \n"
            configureSRT_instance = ConfigureSRT()
            configureSRT_instance.modify_srt(cfg, srt_content_change1)

            time.sleep(srt_change_delay)

            print "### STEP8.1: Rename SRT File ###### \n \n"
            configureSRT_instance.rename_srt_file(cfg, "stock_table")

            print "### STEP9: PPS event-3(on hh1, hh2), event-4(on hh3, hh4) "\
                "booking respectively from channel 1 & channel 2 is being done. ##### \n \n"
            for householdid in householdid_list[:2]:
                result = do_PPSbooking(pps_port, protocol, pps_host, householdid, \
                             pps_headers, payload_ev3, content_ev3, timeout, printflg)
                if result != "PASS":
                    message = "Testcase Failed:Unable to do pps booking of \
                          content ID "+str(content_ev3)+" in household "+str(householdid)
                    print message
                    tims_dict = update_tims_data(tims_dict, 1, message, [test_id])

            for householdid in householdid_list[2:]:
                result = do_PPSbooking(pps_port, protocol, pps_host, \
                       householdid, pps_headers, payload_ev4, content_ev4, timeout, printflg)
                if result != "PASS":
                    message = "Testcase Failed:Unable to do pps booking of \
                               content ID "+str(content_ev4)+" in household "+str(householdid)
                    print message
                    tims_dict = update_tims_data(tims_dict, 1, message, [test_id])

            print "### STEP10: Confirming that the contents in hh1, hh2, "\
                       "hh3 & hh4 are in booked state. ##### \n \n"
            time.sleep(fetch_bookingcatalog_delay)
            # Getting Catalog Response for the Booked Catalog
            for householdid in householdid_list[:2]:
                catalogresult, catalogresponse = verify_booking\
                      (pps_port, protocol, pps_host, householdid, content_ev3, timeout)
                print "Booking response :", catalogresult
                if catalogresult == "PASS":
                    jsonresponse = json.loads(catalogresponse.content)
                    for items in jsonresponse:
                        try:
                            if items['scheduleInstance'] == content_ev3:
                                broadcasting_starttime = items['content']['broadcastDateTime']
                                broadcasting_endtime = items['content']['endAvailability']
                        except:
                            pass
                else:
                    message = "TestCase  Failed : Content ID "+str(content_ev3)\
                        +" in household "+ str(householdid)+ " is not in the BOOKED state"
                    assert False, message

            for householdid in householdid_list[2:]:
                catalogresult, catalogresponse = \
                     verify_booking(pps_port, protocol, pps_host, householdid, \
                     content_ev4, timeout)
                print "Booking response :", catalogresult
                if catalogresult == "PASS":
                    jsonresponse = json.loads(catalogresponse.content)
                    for items in jsonresponse:
                        try:
                            if items['scheduleInstance'] == content_ev4:
                                broadcasting_starttime = items['content']['broadcastDateTime']
                                broadcasting_endtime = items['content']['endAvailability']
                        except:
                            pass
                else:
                    message = "TestCase  Failed : Content ID "+str(content_ev4)\
                               +" in household "+ str(householdid)+ \
                               " is not in the BOOKED state"
                    assert False, message

            broadcasting_starttime = timeDiff(broadcasting_starttime)
            recordingstatechage = recordingstatecheck_timedelay + broadcasting_starttime
            print "Script will wait for " + str(recordingstatechage / 60) \
                   + " minutes to check the event recording state"
            time.sleep(recordingstatechage)
            print "Waiting additional %s seconds to workaround the "\
                   "state change issue."% (recording_delay)
            time.sleep(recording_delay)

            print "### STEP11: Confirming that all four households has "\
                       "the items in recording state. ##### \n \n"
            for householdid in householdid_list[:2]:
                recordingcatalogresult, recordingcatalogresponse = \
                    verify_recording_state(pps_port, protocol, pps_host, \
                    householdid, content_ev3, timeout)
                if recordingcatalogresult != "PASS":
                    message = "Testcase Failed: Content ID {0} in household "\
                         "{1} is not in the RECORDING state".format(content_ev3, \
                         householdid)
                    assert False, message

            for householdid in householdid_list[2:]:
                recordingcatalogresult, recordingcatalogresponse = \
                      verify_recording_state(pps_port, protocol, pps_host, \
                          householdid, content_ev4, timeout)
                if recordingcatalogresult != "PASS":
                    message = "Testcase Failed: Content ID {0} in household "\
                      "{1} is not in the RECORDING state".format(content_ev4, \
                      householdid)
                    assert False, message


            print "\n# STEP12: Verify 2 common copy recording (1 per program) #\n"
            # copy_type = unique_copy
            copy_type = common_copy

            playbackuri_list = get_content_playbackURI(pps_host, pps_port, \
                  protocol, [content_ev3], householdid_list[:2], timeout)
            contentidlist = get_contentid_from_recid(cfg, playbackuri_list, timeout)

            vmr_response_1 = get_vmr_response(cfg, contentidlist[0], timeout)
            vmr_response_2 = get_vmr_response(cfg, contentidlist[1], timeout)
            riodev_recording_hh1 = json.loads(vmr_response_1.content)[0]
            riodev_recording_hh2 = json.loads(vmr_response_2.content)[0]
            print "[INFO: ] riodev_recording_hh1 ", riodev_recording_hh1
            print "[INFO: ] riodev_recording_hh2 ", riodev_recording_hh2

            assert riodev_recording_hh1["CopyType"] == copy_type and (
                riodev_recording_hh2["CopyType"] == copy_type
            ), (
                "Testcase Failed: Content %s are not in expected copytype"
                " %s in household 1 & household 2."% (content_ev3, copy_type))

            print "\n" * 5
            copy_type = common_copy

            playbackuri_list = get_content_playbackURI(pps_host, pps_port, \
                   protocol, [content_ev4], householdid_list[2:], timeout)
            contentidlist = get_contentid_from_recid(cfg, playbackuri_list, timeout)
            vmr_response_1 = get_vmr_response(cfg, contentidlist[0], timeout)
            vmr_response_2 = get_vmr_response(cfg, contentidlist[1], timeout)
            riodev_recording_hh3 = json.loads(vmr_response_1.content)[0]
            riodev_recording_hh4 = json.loads(vmr_response_2.content)[0]
            print "[INFO: ] riodev_recording_hh3 ", riodev_recording_hh3
            print "[INFO: ] riodev_recording_hh4 ", riodev_recording_hh4
            assert riodev_recording_hh3["CopyType"] == copy_type, (
                "Testcase Failed: Content %s are not in expected copytype"
                " %s in household 3."% (content_ev4, copy_type))

            message = "TestCase Passed : SRT is working as expected."
            tims_dict = update_tims_data(tims_dict, 0, message, [test_id])

        except AssertionError as ae:
            message = str(ae)
            tims_dict = update_tims_data(tims_dict, 1, message, [test_id])

        except Exception as e:
            message = str(e)
            tims_dict = update_tims_data(tims_dict, 1, message, [test_id])

        finally:
            for householdid in householdid_list:
                cleanup_household(cfg, pps_port, protocol, pps_host, \
                    householdid, pps_headers, timeout)
            configureSRT_instance = ConfigureSRT()
            configureSRT_instance.modify_srt(cfg, srt_content_reset)
            print message
            return tims_dict