Beispiel #1
0
    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
Beispiel #2
0
    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)
Beispiel #3
0
    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": [{}]})
Beispiel #4
0
 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)
Beispiel #5
0
    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
Beispiel #6
0
    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
Beispiel #7
0
    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")
Beispiel #8
0
    def check_pickleable(self):
        cluster = JsonCluster(
            {"nodes": [
                {"ssh_config": {"host": "localhost1"}},
                {"ssh_config": {"host": "localhost2"}},
                {"ssh_config": {"host": "localhost3"}}]})

        pickle.dumps(cluster)
Beispiel #9
0
 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)
Beispiel #10
0
    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)
Beispiel #11
0
    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)
Beispiel #12
0
 def check_exhausts_supply(self):
     cluster = JsonCluster(self.single_node_cluster_json)
     with pytest.raises(RuntimeError):
         cluster.request(2)
Beispiel #13
0
    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)
Beispiel #14
0
def create_json_cluster(*args, **kwargs):
    return JsonCluster(*args,
                       make_remote_account_func=create_fake_remote_account,
                       **kwargs)
Beispiel #15
0
    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)
Beispiel #16
0
 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))
Beispiel #17
0
    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)
Beispiel #18
0
 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))
Beispiel #19
0
 def check_exhausts_supply(self):
     cluster = JsonCluster(self.single_node_cluster_json)
     with pytest.raises(RuntimeError):
         cluster.request(2)
Beispiel #20
0
 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))