Exemple #1
0
 def test_lock_offline(self):
     with TemporaryDirectory() as tmpdirname:
         list_file = os.path.join(tmpdirname, 'test.json')
         with open(list_file, 'w') as fp:
             fp.write('[{"id": 1, "hostname": "myhost", "online": false}]')
         lock_file = os.path.join(tmpdirname, '1.pid')
         lockable = Lockable(hostname='myhost',
                             resource_list_file=list_file,
                             lock_folder=tmpdirname)
         self.assertFalse(os.path.exists(lock_file))
         with self.assertRaises(ResourceNotFound):
             self.assertFalse(os.path.exists(lock_file))
             lockable.lock({}, timeout_s=0)
         self.assertFalse(os.path.exists(lock_file))
Exemple #2
0
 def test_constructor_file_not_found(self):
     with TemporaryDirectory() as tmpdirname:
         list_file = os.path.join(tmpdirname, 'test.json')
         with self.assertRaises(FileNotFoundError):
             Lockable(hostname='myhost',
                      resource_list_file=list_file,
                      lock_folder=tmpdirname)
Exemple #3
0
 def test_auto_lock(self):
     with TemporaryDirectory() as tmpdirname:
         list_file = os.path.join(tmpdirname, 'test.json')
         resource_info = {"id": 1, "hostname": "myhost", "online": True}
         with open(list_file, 'w') as fp:
             fp.write(f'[{json.dumps(resource_info)}]')
         lockable = Lockable(hostname='myhost',
                             resource_list_file=list_file,
                             lock_folder=tmpdirname)
         lock_file = os.path.join(tmpdirname, '1.pid')
         self.assertFalse(os.path.exists(lock_file))
         with lockable.auto_lock({}) as context:
             resource = context.resource_info
             self.assertEqual(resource, resource_info)
             self.assertTrue(os.path.exists(lock_file))
         self.assertFalse(os.path.exists(lock_file))
Exemple #4
0
 def test_missing_id(self):
     with TemporaryDirectory() as tmpdirname:
         list_file = os.path.join(tmpdirname, 'test.json')
         with open(list_file, 'w') as fp:
             fp.write('[{}]')
         with self.assertRaises(ValueError):
             Lockable(hostname='myhost',
                      resource_list_file=list_file,
                      lock_folder=tmpdirname)
Exemple #5
0
 def test_constructor(self):
     with TemporaryDirectory() as tmpdirname:
         list_file = os.path.join(tmpdirname, 'test.json')
         with open(list_file, 'w') as fp:
             fp.write('[]')
         lockable = Lockable(hostname='myhost',
                             resource_list_file=list_file,
                             lock_folder=tmpdirname)
         self.assertFalse(lockable._resource_list_file_mtime is None)
Exemple #6
0
def create_lockable(
        data=[{
            "id": 1,
            "hostname": "myhost",
            "online": True
        }],
        lock_folder=None):
    with TemporaryDirectory() as tmpdirname:
        lock_folder = lock_folder or tmpdirname
        yield Lockable(hostname='myhost',
                       resource_list=data,
                       lock_folder=lock_folder)
Exemple #7
0
 def test_reload_resource_list_file(self):
     with TemporaryDirectory() as tmpdirname:
         list_file = os.path.join(tmpdirname, 'test.json')
         with open(list_file, 'w') as fp:
             fp.write('[]')
         # mtime has at worst 1 second precision
         time.sleep(1)
         lockable = Lockable(hostname='myhost',
                             resource_list_file=list_file,
                             lock_folder=tmpdirname)
         lockable.load_resources_list_file = mock.MagicMock()
         self.assertEqual(lockable.load_resources_list_file.call_count, 0)
         lockable.reload_resource_list_file()
         self.assertEqual(lockable.load_resources_list_file.call_count, 0)
         with open(list_file, 'w') as fp:
             fp.write('[1]')
         lockable.reload_resource_list_file()
         self.assertEqual(lockable.load_resources_list_file.call_count, 1)
         # Check that stored mtime value is updated
         lockable.reload_resource_list_file()
         self.assertEqual(lockable.load_resources_list_file.call_count, 1)
Exemple #8
0
 def test_lock_require_resources_json_loaded(self):
     lockable = Lockable()
     with self.assertRaises(AssertionError) as error:
         lockable.lock({})
     self.assertEqual(str(error.exception), 'resources list is not loaded')
Exemple #9
0
 def test_invalid_constructor(self):
     with self.assertRaises(AssertionError):
         Lockable(hostname='myhost',
                  resource_list_file='asdf',
                  resource_list=[],
                  lock_folder='.')
Exemple #10
0
 def test_parse_requirements(self):
     self.assertEqual(Lockable.parse_requirements(''), {})
     self.assertEqual(Lockable.parse_requirements('{}'), {})
     self.assertEqual(Lockable.parse_requirements({'a': 'b'}), {'a': 'b'})
     self.assertEqual(Lockable.parse_requirements('a=b'), {"a": "b"})
     self.assertEqual(Lockable.parse_requirements('a=true'), {"a": True})
     self.assertEqual(Lockable.parse_requirements('a=False'), {"a": False})
     self.assertEqual(Lockable.parse_requirements('a=b&c=d'), {
         "a": "b",
         "c": "d"
     })
     self.assertEqual(Lockable.parse_requirements('{"a":"b","c":"d"}'), {
         "a": "b",
         "c": "d"
     })
     with self.assertRaises(ValueError):
         Lockable.parse_requirements('a')
     with self.assertRaises(ValueError):
         Lockable.parse_requirements('a=')
     with self.assertRaises(ValueError):
         Lockable.parse_requirements('{"a":"b","c":"d}')