#!/usr/bin/python
#
# Copyright 2007 Google Inc. Released under the GPL v2

"""This module defines the unittests for the Autotest class
"""

__author__ = """stutsman@google.com (Ryan Stutsman)"""

import os
import sys
import unittest

import common

from autotest_lib.server import utils
from autotest_lib.server import autotest
from autotest_lib.server import hosts


class AutotestTestCase(unittest.TestCase):
    def setUp(self):
        self.autotest = autotest.Autotest()

    def tearDown(self):
        pass


    def testGetAutoDir(self):
        class MockInstallHost:
            def __init__(self):
                self.commands = []
                self.result = "autodir='/stuff/autotest'\n"

            def run(self, command):
                if command == "grep autodir= /etc/autotest.conf":
                    result = hosts.CmdResult()
                    result.stdout = self.result
                    return result
                else:
                    self.commands.append(command)

        host = MockInstallHost()
        self.assertEqual('/stuff/autotest',
                         autotest.Autotest.get_installed_autodir(host))
        host.result = "autodir=/stuff/autotest\n"
        self.assertEqual('/stuff/autotest',
                         autotest.Autotest.get_installed_autodir(host))
        host.result = 'autodir="/stuff/auto test"\n'
        self.assertEqual('/stuff/auto test',
                         autotest.Autotest.get_installed_autodir(host))


    def testInstallFromDir(self):
        class MockInstallHost:
            def __init__(self):
                self.commands = []

            def run(self, command):
                if command == "grep autodir= /etc/autotest.conf":
                    result= hosts.CmdResult()
                    result.stdout = "autodir=/usr/local/autotest\n"
                    return result
                else:
                    self.commands.append(command)

            def send_file(self, src, dst):
                self.commands.append("send_file: %s %s" % (src,
                                                           dst))

        host = MockInstallHost()
        tmpdir = utils.get_tmp_dir()
        self.autotest.get(tmpdir)
        self.autotest.install(host)
        self.assertEqual(host.commands[0],
                         'mkdir -p /usr/local/autotest')
        self.assertTrue(host.commands[1].startswith('send_file: /tmp/'))
        self.assertTrue(host.commands[1].endswith(
                '/ /usr/local/autotest'))




    def testInstallFromSVN(self):
        class MockInstallHost:
            def __init__(self):
                self.commands = []

            def run(self, command):
                if command == "grep autodir= /etc/autotest.conf":
                    result= hosts.CmdResult()
                    result.stdout = "autodir=/usr/local/autotest\n"
                    return result
                else:
                    self.commands.append(command)

        host = MockInstallHost()
        self.autotest.install(host)
        self.assertEqual(host.commands,
                         ['svn checkout '
                          + autotest.AUTOTEST_SVN + ' '
                          + "/usr/local/autotest"])


    def testFirstInstallFromSVNFails(self):
        class MockFirstInstallFailsHost:
            def __init__(self):
                self.commands = []

            def run(self, command):
                if command == "grep autodir= /etc/autotest.conf":
                    result= hosts.CmdResult()
                    result.stdout = "autodir=/usr/local/autotest\n"
                    return result
                else:
                    self.commands.append(command)
                    first = ('svn checkout ' +
                        autotest.AUTOTEST_SVN + ' ' +
                        "/usr/local/autotest")
                    if (command == first):
                        raise autotest.AutoservRunError(
                                "svn not found")

        host = MockFirstInstallFailsHost()
        self.autotest.install(host)
        self.assertEqual(host.commands,
                         ['svn checkout ' + autotest.AUTOTEST_SVN +
                          ' ' + "/usr/local/autotest",
                          'svn checkout ' + autotest.AUTOTEST_HTTP +
                          ' ' + "/usr/local/autotest"])


def suite():
    return unittest.TestLoader().loadTestsFromTestCase(AutotestTestCase)

if __name__ == '__main__':
    unittest.TextTestRunner(verbosity=2).run(suite())