'Given a pairing of a control file to a machine label, find all machines
with that label, and submit that control file to them.
:param kernel_label: Label (string) of the kernel to run such as
\'<kernel-version> : <config> : <date>\'
If any pairing object has its job_label attribute set it
will override this value for that particular job.
:return: A list of job objects.'

def invoke_test(self, pairing, kernel, kernel_label, priority='Medium', kernel_cmdline=None, **dargs):

    if pairing.job_label:
        kernel_label = pairing.job_label
    job_name = ('%s    :    %s' % (pairing.machine_label, kernel_label))
    hosts = self.get_hosts(multiple_labels=[pairing.machine_label])
    platforms = pairing.platforms
    hosts = [h for h in hosts if self._included_platform(h, platforms)]
    dead_statuses = self.host_statuses(live=False)
    host_list = [h.hostname for h in hosts if (h.status not in dead_statuses)]
    print ('HOSTS:    %s' % host_list)
    if pairing.atomic_group_sched:
        dargs['synch_count'] = pairing.synch_count
        dargs['atomic_group_name'] = pairing.machine_label
    else:
        dargs['hosts'] = host_list
    new_job = self.create_job_by_test(name=job_name, dependencies=[pairing.machine_label], tests=[pairing.control_file], priority=priority, kernel=kernel, kernel_cmdline=kernel_cmdline, use_container=pairing.container, **dargs)
    if new_job:
        if pairing.testname:
            new_job.testname = pairing.testname
        print ('Invoked    test    %s    :    %s' % (new_job.id, job_name))
    return new_job
