#!/usr/bin/python

import dbus
import os
import unittest

class TestSystemd(unittest.TestCase):

      def setUp(self):
            self.system_bus = dbus.SystemBus()
            self.localed = dbus.Interface(
                  self.system_bus.get_object ("org.freedesktop.locale1", "/org/freedesktop/locale1"),
                  "org.freedesktop.locale1")
            self.localed_props = dbus.Interface(
                  self.system_bus.get_object ("org.freedesktop.locale1", "/org/freedesktop/locale1"),
                  "org.freedesktop.DBus.Properties")

            self.hostnamed = dbus.Interface(
                  self.system_bus.get_object ("org.freedesktop.hostname1", "/org/freedesktop/hostname1"),
                  "org.freedesktop.hostname1")
            self.hostnamed_props = dbus.Interface(
                  self.system_bus.get_object ("org.freedesktop.hostname1", "/org/freedesktop/hostname1"),
                  "org.freedesktop.DBus.Properties")

      def test_hostname(self):
            old_hostname = self.hostnamed_props.Get("org.freedesktop.hostname1", "Hostname")
            new_hostname = "ubuntu-system-service"

            self.hostnamed.SetHostname(new_hostname, True)
            assert(new_hostname == self.hostnamed_props.Get("org.freedesktop.hostname1", "Hostname"))

            # Now restore to the previous value
            self.hostnamed.SetHostname(old_hostname, True)
            assert(old_hostname == self.hostnamed_props.Get("org.freedesktop.hostname1", "Hostname"))

      def test_static_hostname(self):
            old_hostname = self.hostnamed_props.Get("org.freedesktop.hostname1", "StaticHostname")
            new_hostname = "ubuntu-system-service"

            self.hostnamed.SetStaticHostname(new_hostname, True)
            assert(new_hostname == self.hostnamed_props.Get("org.freedesktop.hostname1", "StaticHostname"))
            assert(new_hostname == open("/etc/hostname").read())

            # Now restore to the previous value
            self.hostnamed.SetStaticHostname(old_hostname, True)
            assert(old_hostname == self.hostnamed_props.Get("org.freedesktop.hostname1", "StaticHostname"))
            assert(old_hostname == open("/etc/hostname").read())

      def test_set_locale(self):
            old_locale = self.localed_props.Get("org.freedesktop.locale1", "Locale")
            new_locale = [ "LANG=en_US.UTF-8", "LC_MONETARY=es" ]

            self.localed.SetLocale(new_locale, True)
            assert(new_locale == self.localed_props.Get("org.freedesktop.locale1", "Locale"))

            # Now restore to the previous value
            self.localed.SetLocale(old_locale, True)
            assert(old_locale == self.localed_props.Get("org.freedesktop.locale1", "Locale"))

      def test_keyboard(self):
            old_model = self.localed_props.Get("org.freedesktop.locale1", "X11Model")
            old_layout = self.localed_props.Get("org.freedesktop.locale1", "X11Layout")
            old_variant = self.localed_props.Get("org.freedesktop.locale1", "X11Variant")
            old_options = self.localed_props.Get("org.freedesktop.locale1", "X11Options")

            new_model = "pc105"
            new_layout = "es"
            new_variant = ""
            new_options = ""

            self.localed.SetX11Keyboard(new_layout, new_model, new_variant, new_options, True, True)
            assert(new_model == self.localed_props.Get("org.freedesktop.locale1", "X11Model"))
            assert(new_layout == self.localed_props.Get("org.freedesktop.locale1", "X11Layout"))
            assert(new_variant == self.localed_props.Get("org.freedesktop.locale1", "X11Variant"))
            assert(new_options == self.localed_props.Get("org.freedesktop.locale1", "X11Options"))

            # Now restore to the previous value
            self.localed.SetX11Keyboard(old_layout, old_model, old_variant, old_options, True, True)
            assert(old_model == self.localed_props.Get("org.freedesktop.locale1", "X11Model"))
            assert(old_layout == self.localed_props.Get("org.freedesktop.locale1", "X11Layout"))
            assert(old_variant == self.localed_props.Get("org.freedesktop.locale1", "X11Variant"))
            assert(old_options == self.localed_props.Get("org.freedesktop.locale1", "X11Options"))

if __name__ == "__main__":
    unittest.main()
