示例#1
0
 def test_double_lock(self):
     node_name = 'goldfish'
     user = '******'
     node = Node(name=node_name)
     node.update(dict(locked=True, locked_by=user))
     with pytest.raises(ForbiddenRequestError):
         node.update(dict(locked=True, locked_by=user))
示例#2
0
    def index_post(self):
        """
        Create a new node
        """
        try:
            data = request.json
            name = data.get('name')
        except ValueError:
            rollback()
            error('/errors/invalid/', 'could not decode JSON body')
        # we allow empty data to be pushed
        if not name:
            error('/errors/invalid/', "could not find required key: 'name'")

        if Node.filter_by(name=name).first():
            error('/errors/invalid/',
                  "Node with name %s already exists" % name)
        else:
            self.node = Node(name=name)
            try:
                self.node.update(data)
            except PaddlesError as exc:
                error(exc.url, str(exc))
            log.info("Created {node}: {data}".format(
                node=self.node,
                data=data,
            ))
        return dict()
示例#3
0
 def test_basic_deletion(self):
     new_node = Node('test_basic_deletion')
     models.commit()
     new_node.delete()
     models.commit()
     query = Node.query.filter(Node.name == 'test_basic_deletion')
     assert not query.count()
示例#4
0
    def update_node(self, node_json):
        name = node_json['name'].split('@')[1]
        query = Node.query.filter(Node.name == name)
        if query.count():
            node = query.one()
            verb = "Updated"
        else:
            node = Node(name)
            verb = "Created"

        vm_host_name = node_json.get('vpshost', '')
        is_vm = vm_host_name not in (None, '')
        if is_vm:
            self.vm_hosts[name] = node_json['vpshost']

        locked_since_local = datetime.strptime(node_json['locked_since'],
                                               '%Y-%m-%dT%H:%M:%S')
        locked_since = local_datetime_to_utc(locked_since_local)

        node.machine_type = node_json.get('type')
        node.arch = node_json.get('arch')
        node.distro = node_json.get('distro')
        node.up = bool(node_json.get('up', 0))
        node.is_vm = is_vm
        node.mac_address = node_json.get('mac').lower()
        node.ssh_pub_key = node_json.get('sshpubkey')
        node.locked = node_json.get('locked') == 1
        node.locked_by = node_json.get('locked_by')
        node.locked_since = locked_since
        node.description = node_json.get('description')

        return verb
示例#5
0
 def test_init(self):
     name = 'test_init'
     mtype = 'vps'
     Node(name=name, machine_type=mtype)
     models.commit()
     query = Node.query.filter(Node.name == name)\
         .filter(Node.machine_type == mtype)
     assert query.one()
示例#6
0
 def test_locked_since_unlocked(self):
     node_name = 'cats'
     user = '******'
     old_locked_since = datetime(2000, 1, 1, 0, 0)
     node = Node(name=node_name)
     node.update(dict(locked=True, locked_by=user))
     node.locked_since = old_locked_since
     node.update(dict(locked=False, locked_by=user))
     assert node.locked_since is None
示例#7
0
 def test_locked_since_locked(self):
     node_name = 'cats'
     user = '******'
     node = Node(name=node_name)
     node.update(dict(locked=True, locked_by=user))
     # This used to take <100us; since we started flushing on node updates,
     # it takes around 2-3ms.
     assert (datetime.utcnow() -
             node.locked_since) < timedelta(milliseconds=5)
示例#8
0
 def test_job_adds_node(self):
     run_name = 'test_job_adds_node'
     node_name = 'added_node'
     assert Node.query.filter(Node.name == node_name).all() == []
     node = Node(name=node_name)
     targets = {'foo@' + node_name: ''}
     new_run = Run(run_name)
     job = Job(dict(targets=targets), new_run)
     assert Node.query.filter(Node.name == node_name).one()
     assert Job.query.filter(Job.target_nodes.contains(node)).one() == job
示例#9
0
    def test_vm_host(self):
        vm_host_name = 'vm_host'
        vm_guest_names = ['vm_guest_1', 'vm_guest_2']
        host_node = Node(name=vm_host_name)
        guest_nodes = []
        for name in vm_guest_names:
            node = Node(name=name)
            node.vm_host = host_node
            guest_nodes.append(node)
        models.commit()
        query = Node.query.filter(Node.vm_host == host_node)
        assert query.count() == len(vm_guest_names)

        # Test that the backref 'vm_guests' works as well. I am intentionally
        # testing two things here.
        query = Node.query
        for guest in guest_nodes:
            query = query.filter(Node.vm_guests.contains(guest))
        assert host_node == query.one()
示例#10
0
    def _populate(self, job):
        #print "Job: %s/%s" % (job.name, job.job_id)
        if not job.targets:
            return

        for key in job.targets.keys():
            name = key.split('@')[1]
            mtype = self.parse_machine_type(name)
            node_q = Node.query.filter(Node.name == name)
            #print " node: exists={count}, name={name}".format(
            #    count=node_q.count(),
            #    name=name,
            #)
            if node_q.count() == 0:
                #print "  Creating Node with name: %s" % name
                node = Node(name=name)
            else:
                node = node_q.one()
            if mtype:
                node.machine_type = mtype
            if node not in job.target_nodes:
                job.target_nodes.append(node)
示例#11
0
 def test_invalid(self):
     name = 'test_invalid'
     Node(name=name, is_vm='invalid')
     with pytest.raises(StatementError):
         models.commit()
示例#12
0
 def test_basic_creation(self):
     Node(name='new_node')
     models.commit()
     assert Node.get(1).name == 'new_node'
示例#13
0
 def test_locked_since_locked(self):
     node_name = 'cats'
     user = '******'
     node = Node(name=node_name)
     node.update(dict(locked=True, locked_by=user))
     assert (datetime.utcnow() - node.locked_since) < timedelta(0, 0, 100)