Source code for aiida.backends.tests.orm.test_computers
# -*- 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 #
###########################################################################
"""Tests for the `Computer` ORM class."""
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import
from aiida import orm
from aiida.backends.testbase import AiidaTestCase
from aiida.common import exceptions
[docs]class TestComputer(AiidaTestCase):
"""Tests for the `Computer` ORM class."""
[docs] def test_get_transport(self):
"""
Test the get_transport method of Computer
"""
import tempfile
new_comp = orm.Computer(
name='bbb', hostname='localhost', transport_type='local', scheduler_type='direct',
workdir='/tmp/aiida').store()
# Configure the computer - no parameters for local transport
authinfo = orm.AuthInfo(computer=new_comp, user=orm.User.objects.get_default())
authinfo.store()
transport = new_comp.get_transport()
# It's on localhost, so I see files that I create
with transport:
with tempfile.NamedTemporaryFile() as handle:
self.assertEqual(transport.isfile(handle.name), True)
# Here the file should have been deleted
self.assertEqual(transport.isfile(handle.name), False)
[docs] def test_delete(self):
"""Test the deletion of a `Computer` instance."""
new_comp = orm.Computer(
name='aaa', hostname='aaa', transport_type='local', scheduler_type='pbspro', workdir='/tmp/aiida').store()
comp_pk = new_comp.pk
check_computer = orm.Computer.objects.get(id=comp_pk)
self.assertEqual(comp_pk, check_computer.pk)
orm.Computer.objects.delete(comp_pk)
with self.assertRaises(exceptions.NotExistent):
orm.Computer.objects.get(id=comp_pk)
[docs]class TestComputerConfigure(AiidaTestCase):
"""Tests for the configuring of instance of the `Computer` ORM class."""
[docs] def setUp(self):
"""Prepare current user and computer builder with common properties."""
from aiida.orm.utils.builders.computer import ComputerBuilder
self.comp_builder = ComputerBuilder(label='test', description='computer', enabled=True, hostname='localhost')
self.comp_builder.scheduler = 'direct'
self.comp_builder.work_dir = '/tmp/aiida'
self.comp_builder.prepend_text = ''
self.comp_builder.append_text = ''
self.comp_builder.mpiprocs_per_machine = 8
self.comp_builder.mpirun_command = 'mpirun'
self.comp_builder.shebang = '#!xonsh'
self.user = orm.User.objects.get_default()
[docs] def test_configure_local(self):
"""Configure a computer for local transport and check it is configured."""
self.comp_builder.label = 'test_configure_local'
self.comp_builder.transport = 'local'
comp = self.comp_builder.new()
comp.store()
comp.configure()
self.assertTrue(comp.is_user_configured(self.user))
[docs] def test_configure_ssh(self):
"""Configure a computer for ssh transport and check it is configured."""
self.comp_builder.label = 'test_configure_ssh'
self.comp_builder.transport = 'ssh'
comp = self.comp_builder.new()
comp.store()
comp.configure(username='radames', port='22')
self.assertTrue(comp.is_user_configured(self.user))
[docs] def test_configure_ssh_invalid(self):
"""Try to configure computer with invalid auth params and check it fails."""
self.comp_builder.label = 'test_configure_ssh_invalid'
self.comp_builder.transport = 'ssh'
comp = self.comp_builder.new()
comp.store()
with self.assertRaises(ValueError):
comp.configure(username='radames', invalid_auth_param='TEST')