# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved. #
# This file is part of the AiiDA code. #
# #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core #
# For further information on the license, see the LICENSE.txt file #
# For further information please visit http://www.aiida.net #
###########################################################################
"""Generic tests that need the use of the DB."""
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import
from aiida.backends.testbase import AiidaTestCase
from aiida import orm
[docs]class TestCode(AiidaTestCase):
"""
Test the Code class.
"""
[docs] def test_code_local(self):
import tempfile
from aiida.orm import Code
from aiida.common.exceptions import ValidationError
code = Code(local_executable='test.sh')
with self.assertRaises(ValidationError):
# No file with name test.sh
code.store()
with tempfile.NamedTemporaryFile(mode='w+') as fhandle:
fhandle.write("#/bin/bash\n\necho test run\n")
fhandle.flush()
code.put_object_from_filelike(fhandle, 'test.sh')
code.store()
self.assertTrue(code.can_run_on(self.computer))
self.assertTrue(code.get_local_executable(), 'test.sh')
self.assertTrue(code.get_execname(), 'stest.sh')
[docs] def test_remote(self):
import tempfile
from aiida.orm import Code
from aiida.common.exceptions import ValidationError
with self.assertRaises(ValueError):
# remote_computer_exec has length 2 but is not a list or tuple
Code(remote_computer_exec='ab')
# invalid code path
with self.assertRaises(ValueError):
Code(remote_computer_exec=(self.computer, ''))
# Relative path is invalid for remote code
with self.assertRaises(ValueError):
Code(remote_computer_exec=(self.computer, 'subdir/run.exe'))
# first argument should be a computer, not a string
with self.assertRaises(TypeError):
Code(remote_computer_exec=('localhost', '/bin/ls'))
code = Code(remote_computer_exec=(self.computer, '/bin/ls'))
with tempfile.NamedTemporaryFile(mode='w+') as fhandle:
fhandle.write("#/bin/bash\n\necho test run\n")
fhandle.flush()
code.put_object_from_filelike(fhandle, 'test.sh')
with self.assertRaises(ValidationError):
# There are files inside
code.store()
# If there are no files, I can store
code.delete_object('test.sh')
code.store()
self.assertEquals(code.get_remote_computer().pk, self.computer.pk)
self.assertEquals(code.get_remote_exec_path(), '/bin/ls')
self.assertEquals(code.get_execname(), '/bin/ls')
self.assertTrue(code.can_run_on(self.computer))
othercomputer = orm.Computer(
name='another_localhost',
hostname='localhost',
transport_type='local',
scheduler_type='pbspro',
workdir='/tmp/aiida').store()
self.assertFalse(code.can_run_on(othercomputer))
[docs]class TestBool(AiidaTestCase):
[docs] def test_bool_conversion(self):
for val in [True, False]:
self.assertEqual(val, bool(orm.Bool(val)))
[docs] def test_int_conversion(self):
for val in [True, False]:
self.assertEqual(int(val), int(orm.Bool(val)))