def start_manager(self): if TEST_ENV in ["boot2docker", "boot2docker-local"]: self.job_manager = RemoteDockerJobManager([{ "remote_host": "192.168.59.103", "remote_docker_port": 2375, "remote_agent_port": 63456 }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True) elif TEST_ENV == "jenkins": self.job_manager = RemoteDockerJobManager([{ "remote_host": "localhost", "remote_docker_port": 2375, "remote_agent_port": 63456 }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True) self.job_manager.start()
def create_job_manager(configuration, plugin_manager, task_directory, course_factory, task_factory, is_testing=False): """ Creates a new inginious.backend job manager from the configuration """ # Create the job manager backend_type = configuration.get("backend", "local") if backend_type == "local": return LocalJobManager( configuration.get( 'containers', { "default": "ingi/inginious-c-default", "sekexe": "ingi/inginious-c-sekexe" }), task_directory, course_factory, task_factory, configuration.get('local_agent_tmp_dir', "/tmp/inginious_agent"), plugin_manager, is_testing) elif backend_type == "remote": return RemoteDockerJobManager( configuration.get("docker_daemons", []), configuration.get( 'containers', { "default": "ingi/inginious-c-default", "sekexe": "ingi/inginious-c-sekexe" }), task_directory, course_factory, task_factory, plugin_manager, is_testing) elif backend_type == "remote_manual": return RemoteManualAgentJobManager( configuration.get("agents", [{ "host": "localhost", "port": 5001 }]), configuration.get( 'containers', { "default": "ingi/inginious-c-default", "sekexe": "ingi/inginious-c-sekexe" }), task_directory, course_factory, task_factory, plugin_manager, is_testing) elif backend_type == "docker_machine": return DockerMachineJobManager( configuration.get("machines", []), configuration.get( 'containers', { "default": "ingi/inginious-c-default", "sekexe": "ingi/inginious-c-sekexe" }), task_directory, course_factory, task_factory, plugin_manager, is_testing) else: raise Exception("Unknown inginious.backend {}".format(backend_type))
def start_manager(self): if TEST_ENV in ["boot2docker", "boot2docker-local"]: self.job_manager = RemoteDockerJobManager( [{ "remote_host": "192.168.59.103", "remote_docker_port": 2375, "remote_agent_port": 63456 }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True) elif TEST_ENV == "jenkins": self.job_manager = RemoteDockerJobManager( [{ "remote_host": "localhost", "remote_docker_port": 2375, "remote_agent_port": 63456 }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True) self.job_manager.start()
class TestDockerJobManager(object): def setUp(self): if TEST_ENV is None: raise SkipTest("Testing the Docker Job Manager is disabled.") elif TEST_ENV in ["boot2docker", "boot2docker-local"]: self.docker_connection = docker.Client( base_url="tcp://192.168.59.103:2375") elif TEST_ENV == "jenkins": self.docker_connection = docker.Client( base_url="tcp://localhost:2375") else: raise Exception( "Unknown method for testing the Docker Job Manager!") # Force the removal of all containers/images linked to this test try: self.docker_connection.remove_container("inginious-agent", force=True) except: pass try: self.docker_connection.remove_image("ingi/inginious-agent", force=True) except: pass self.course_factory, self.task_factory = create_factories("./tasks") self.setUpDocker() self.job_manager = None self.setUpJobManager() def setUpDocker(self): pass def setUpJobManager(self): pass def start_manager(self): if TEST_ENV in ["boot2docker", "boot2docker-local"]: self.job_manager = RemoteDockerJobManager( [{ "remote_host": "192.168.59.103", "remote_docker_port": 2375, "remote_agent_port": 63456 }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True) elif TEST_ENV == "jenkins": self.job_manager = RemoteDockerJobManager( [{ "remote_host": "localhost", "remote_docker_port": 2375, "remote_agent_port": 63456 }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True) self.job_manager.start() def build_fake_agent(self, dockerfile="FakeAgentDockerfile"): dockerfile_dir = os.path.abspath( os.path.join(os.path.dirname(os.path.realpath(__file__)), "utils/")) print[ line for line in self.docker_connection.build( dockerfile_dir, dockerfile=dockerfile, rm=True, tag="ingi/inginious-agent") ] def start_fake_agent(self): response = self.docker_connection.create_container( "ingi/inginious-agent", detach=True, name="inginious-agent") container_id = response["Id"] # Start the container self.docker_connection.start(container_id) def tearDown(self): # sanitize a bit Docker... if self.job_manager is not None: self.job_manager.close() try: self.docker_connection.remove_container("inginious-agent", force=True) except: pass try: self.docker_connection.remove_image("ingi/inginious-agent", force=True) except: pass
def test_invalid_agent_already_started(self): assert RemoteDockerJobManager.is_agent_valid_and_started( self.docker_connection, "inginious-agent") is False
def test_agent_no_image(self): assert RemoteDockerJobManager.is_agent_image_update_needed( self.docker_connection) is True
class TestDockerJobManager(object): def setUp(self): if TEST_ENV is None: raise SkipTest("Testing the Docker Job Manager is disabled.") elif TEST_ENV in ["boot2docker", "boot2docker-local"]: self.docker_connection = docker.Client(base_url="tcp://192.168.59.103:2375") elif TEST_ENV == "jenkins": self.docker_connection = docker.Client(base_url="tcp://localhost:2375") else: raise Exception("Unknown method for testing the Docker Job Manager!") # Force the removal of all containers/images linked to this test try: self.docker_connection.remove_container("inginious-agent", force=True) except: pass try: self.docker_connection.remove_image("ingi/inginious-agent", force=True) except: pass self.course_factory, self.task_factory = create_factories("./tasks") self.setUpDocker() self.job_manager = None self.setUpJobManager() def setUpDocker(self): pass def setUpJobManager(self): pass def start_manager(self): if TEST_ENV in ["boot2docker", "boot2docker-local"]: self.job_manager = RemoteDockerJobManager([{ "remote_host": "192.168.59.103", "remote_docker_port": 2375, "remote_agent_port": 63456 }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True) elif TEST_ENV == "jenkins": self.job_manager = RemoteDockerJobManager([{ "remote_host": "localhost", "remote_docker_port": 2375, "remote_agent_port": 63456 }], {"default": "ingi/inginious-c-default"}, "./tasks", self.course_factory, self.task_factory, is_testing=True) self.job_manager.start() def build_fake_agent(self, dockerfile="FakeAgentDockerfile"): dockerfile_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "utils/")) print [line for line in self.docker_connection.build(dockerfile_dir, dockerfile=dockerfile, rm=True, tag="ingi/inginious-agent")] def start_fake_agent(self): response = self.docker_connection.create_container( "ingi/inginious-agent", detach=True, name="inginious-agent" ) container_id = response["Id"] # Start the container self.docker_connection.start(container_id) def tearDown(self): # sanitize a bit Docker... if self.job_manager is not None: self.job_manager.close() try: self.docker_connection.remove_container("inginious-agent", force=True) except: pass try: self.docker_connection.remove_image("ingi/inginious-agent", force=True) except: pass
def test_invalid_agent_already_started(self): assert RemoteDockerJobManager.is_agent_valid_and_started(self.docker_connection, "inginious-agent") is False
def test_agent_no_image(self): assert RemoteDockerJobManager.is_agent_image_update_needed(self.docker_connection) is True