def check_parsing(self): """ Checks that RemoteAccounts are generated correctly from input JSON""" node = JsonCluster( { "nodes": [ {"ssh_config": {"host": "hostname"}}]}).alloc(Service.setup_node_spec(num_nodes=1))[0] assert node.account.hostname == "hostname" assert node.account.user is None ssh_config = { "host": "hostname", "user": "******", "hostname": "localhost", "port": 22 } node = JsonCluster({"nodes": [{"hostname": "hostname", "user": "******", "ssh_config": ssh_config}]}).alloc(Service.setup_node_spec(num_nodes=1))[0] assert node.account.hostname == "hostname" assert node.account.user == "user" # check ssh configs assert node.account.ssh_config.host == "hostname" assert node.account.ssh_config.user == "user" assert node.account.ssh_config.hostname == "localhost" assert node.account.ssh_config.port == 22
def check_invalid_json(self): # Missing list of nodes with pytest.raises(ValueError): JsonCluster(cluster_json={}, is_type_based=False) # Missing hostname, which is required with pytest.raises(ValueError): JsonCluster(cluster_json={"nodes": [{}]}, is_type_based=False)
def check_invalid_json(self): # Missing list of nodes with pytest.raises(ValueError): JsonCluster({}) # Missing hostname, which is required with pytest.raises(ValueError): JsonCluster({"nodes": [{}]})
def check_node_names(self): cluster = JsonCluster( {"nodes": [ {"ssh_config": {"host": "localhost1"}}, {"ssh_config": {"host": "localhost2"}}, {"ssh_config": {"host": "localhost3"}}]}) hosts = set(["localhost1", "localhost2", "localhost3"]) nodes = cluster.alloc(cluster.available()) assert hosts == set(node.name for node in nodes)
def check_cluster_size(self): cluster = JsonCluster({"nodes": []}) assert len(cluster) == 0 n = 10 cluster = JsonCluster( {"nodes": [{ "hostname": "localhost%d" % x } for x in range(n)]}) assert len(cluster) == n
def check_cluster_size(self): cluster = JsonCluster(cluster_json={"nodes": []}, is_type_based=False) assert len(cluster) == 0 n = 10 cluster = JsonCluster(cluster_json={ "nodes": [{ "ssh_config": { "host": "localhost%d" % x } } for x in range(n)] }, is_type_based=False) assert len(cluster) == n
def check_parsing(self): # Checks that RemoteAccounts are generated correctly from input JSON node = JsonCluster({"nodes": [{"hostname": "hostname"}]}).request(1)[0] assert (node.account.hostname == "hostname") assert (node.account.user is None) assert (node.account.ssh_args is None) node = JsonCluster({ "nodes": [{ "hostname": "hostname", "user": "******", "ssh_args": "ssh_args" }] }).request(1)[0] assert (node.account.hostname == "hostname") assert (node.account.user == "user") assert (node.account.ssh_args == "ssh_args")
def check_pickleable(self): cluster = JsonCluster( {"nodes": [ {"ssh_config": {"host": "localhost1"}}, {"ssh_config": {"host": "localhost2"}}, {"ssh_config": {"host": "localhost3"}}]}) pickle.dumps(cluster)
def check_node_names(self): cluster = JsonCluster({ "nodes": [{ "ssh_config": { "host": "localhost1" } }, { "ssh_config": { "host": "localhost2" } }, { "ssh_config": { "host": "localhost3" } }] }) hosts = set(["localhost1", "localhost2", "localhost3"]) nodes = cluster.alloc(cluster.available()) assert hosts == set(node.name for node in nodes)
def check_pickleable(self): cluster = JsonCluster(cluster_json={ "nodes": [{ "ssh_config": { "host": "localhost1" } }, { "ssh_config": { "host": "localhost2" } }, { "ssh_config": { "host": "localhost3" } }] }, is_type_based=False) pickle.dumps(cluster)
def check_allocate_free(self): cluster = JsonCluster({ "nodes": [{ "hostname": "localhost1" }, { "hostname": "localhost2" }, { "hostname": "localhost3" }] }) assert len(cluster) == 3 assert (cluster.num_available_nodes() == 3) nodes = cluster.request(1) nodes_hostnames = self.cluster_hostnames(nodes) assert len(cluster) == 3 assert (cluster.num_available_nodes() == 2) nodes2 = cluster.request(2) nodes2_hostnames = self.cluster_hostnames(nodes2) assert len(cluster) == 3 assert (cluster.num_available_nodes() == 0) assert (nodes_hostnames.isdisjoint(nodes2_hostnames)) cluster.free(nodes) assert (cluster.num_available_nodes() == 1) cluster.free(nodes2) assert (cluster.num_available_nodes() == 3)
def check_exhausts_supply(self): cluster = JsonCluster(self.single_node_cluster_json) with pytest.raises(RuntimeError): cluster.request(2)
def check_allocate_free(self): cluster = JsonCluster({"nodes":[{"hostname": "localhost1"}, {"hostname": "localhost2"}, {"hostname": "localhost3"}]}) assert(cluster.num_available_nodes() == 3) nodes = cluster.request(1) nodes_hostnames = self.cluster_hostnames(nodes) assert(cluster.num_available_nodes() == 2) nodes2 = cluster.request(2) nodes2_hostnames = self.cluster_hostnames(nodes2) assert(cluster.num_available_nodes() == 0) assert(nodes_hostnames.isdisjoint(nodes2_hostnames)) cluster.free(nodes) assert(cluster.num_available_nodes() == 1) cluster.free(nodes2) assert(cluster.num_available_nodes() == 3)
def create_json_cluster(*args, **kwargs): return JsonCluster(*args, make_remote_account_func=create_fake_remote_account, **kwargs)
def check_allocate_free(self): cluster = JsonCluster({ "nodes": [{ "ssh_config": { "host": "localhost1" } }, { "ssh_config": { "host": "localhost2" } }, { "ssh_config": { "host": "localhost3" } }] }) assert len(cluster) == 3 assert (cluster.num_available_nodes() == 3) nodes = cluster.alloc(Service.setup_node_spec(num_nodes=1)) nodes_hostnames = self.cluster_hostnames(nodes) assert len(cluster) == 3 assert (cluster.num_available_nodes() == 2) nodes2 = cluster.alloc(Service.setup_node_spec(num_nodes=2)) nodes2_hostnames = self.cluster_hostnames(nodes2) assert len(cluster) == 3 assert (cluster.num_available_nodes() == 0) assert (nodes_hostnames.isdisjoint(nodes2_hostnames)) cluster.free(nodes) assert (cluster.num_available_nodes() == 1) cluster.free(nodes2) assert (cluster.num_available_nodes() == 3)
def check_exhausts_supply(self): cluster = JsonCluster(self.single_node_cluster_json) with pytest.raises(InsufficientResourcesError): cluster.alloc(Service.setup_cluster_spec(num_nodes=2))
def check_allocate_free(self): cluster = JsonCluster( {"nodes": [ {"ssh_config": {"host": "localhost1"}}, {"ssh_config": {"host": "localhost2"}}, {"ssh_config": {"host": "localhost3"}}]}) assert len(cluster) == 3 assert(cluster.num_available_nodes() == 3) nodes = cluster.alloc(Service.setup_cluster_spec(num_nodes=1)) nodes_hostnames = self.cluster_hostnames(nodes) assert len(cluster) == 3 assert(cluster.num_available_nodes() == 2) nodes2 = cluster.alloc(Service.setup_cluster_spec(num_nodes=2)) nodes2_hostnames = self.cluster_hostnames(nodes2) assert len(cluster) == 3 assert(cluster.num_available_nodes() == 0) assert(nodes_hostnames.isdisjoint(nodes2_hostnames)) cluster.free(nodes) assert(cluster.num_available_nodes() == 1) cluster.free(nodes2) assert(cluster.num_available_nodes() == 3)
def check_exhausts_supply(self): cluster = JsonCluster(self.single_node_cluster_json) with pytest.raises(RuntimeError): cluster.alloc(Service.setup_node_spec(num_nodes=2))