Commit 1d43b46a authored by Jelte Jansen's avatar Jelte Jansen
Browse files

Merge branch 'trac1246'

parents cf1ce254 ea78ae80
......@@ -44,10 +44,12 @@ import os
# installed on the system
if "B10_FROM_SOURCE" in os.environ:
SPECFILE_LOCATION = os.environ["B10_FROM_SOURCE"] + "/src/bin/bind10/bob.spec"
ADD_LIBEXEC_PATH = False
else:
PREFIX = "@prefix@"
DATAROOTDIR = "@datarootdir@"
SPECFILE_LOCATION = "@datadir@/@PACKAGE@/bob.spec".replace("${datarootdir}", DATAROOTDIR).replace("${prefix}", PREFIX)
ADD_LIBEXEC_PATH = True
import subprocess
import signal
......@@ -61,6 +63,7 @@ from optparse import OptionParser, OptionValueError
import io
import pwd
import posix
import copy
import isc.cc
import isc.util.process
......@@ -184,9 +187,9 @@ class ProcessInfo:
# Environment variables for the child process will be a copy of those
# of the boss process with any additional specific variables given
# on construction (self.env).
spawn_env = os.environ
spawn_env = copy.deepcopy(os.environ)
spawn_env.update(self.env)
if 'B10_FROM_SOURCE' not in os.environ:
if ADD_LIBEXEC_PATH:
spawn_env['PATH'] = "@@LIBEXECDIR@@:" + spawn_env['PATH']
self.process = subprocess.Popen(self.args,
stdin=subprocess.PIPE,
......@@ -355,8 +358,10 @@ class BoB:
def start_creator(self):
self.curproc = 'b10-sockcreator'
self.sockcreator = isc.bind10.sockcreator.Creator("@@LIBEXECDIR@@:" +
os.environ['PATH'])
creator_path = os.environ['PATH']
if ADD_LIBEXEC_PATH:
creator_path = "@@LIBEXECDIR@@:" + creator_path
self.sockcreator = isc.bind10.sockcreator.Creator(creator_path)
def stop_creator(self, kill=False):
if self.sockcreator is None:
......@@ -587,7 +592,11 @@ class BoB:
# a cleaner solution, but for a short term workaround we specify the
# path here, unconditionally, and without even bothering which
# environment variable should be used.
if not "B10_FROM_SOURCE" in os.environ:
#
# We reuse the ADD_LIBEXEC_PATH variable to see whether we need to
# do this, as the conditions that make this workaround needed are
# the same as for the libexec path addition
if ADD_LIBEXEC_PATH:
cur_path = os.getenv('DYLD_LIBRARY_PATH')
cur_path = '' if cur_path is None else ':' + cur_path
c_channel_env['DYLD_LIBRARY_PATH'] = "@@LIBDIR@@" + cur_path
......
......@@ -21,6 +21,7 @@ from bind10_src import ProcessInfo, BoB, parse_args, dump_pid, unlink_pid_file,
import unittest
import sys
import os
import copy
import signal
import socket
from isc.net.addr import IPAddr
......@@ -360,6 +361,10 @@ class TestStartStopProcessesBob(unittest.TestCase):
of processes and that the right processes are started and stopped
according to changes in configuration.
"""
def check_environment_unchanged(self):
# Check whether the environment has not been changed
self.assertEqual(original_os_environ, os.environ)
def check_started(self, bob, core, auth, resolver):
"""
Check that the right sets of services are started. The ones that
......@@ -379,6 +384,7 @@ class TestStartStopProcessesBob(unittest.TestCase):
self.assertEqual(bob.stats, core)
self.assertEqual(bob.stats_httpd, core)
self.assertEqual(bob.cmdctl, core)
self.check_environment_unchanged()
def check_preconditions(self, bob):
self.check_started(bob, False, False, False)
......@@ -389,6 +395,7 @@ class TestStartStopProcessesBob(unittest.TestCase):
should be started. Some processes still need to be running.
"""
self.check_started(bob, True, False, False)
self.check_environment_unchanged()
def check_started_both(self, bob):
"""
......@@ -396,18 +403,21 @@ class TestStartStopProcessesBob(unittest.TestCase):
(auth and resolver) are enabled.
"""
self.check_started(bob, True, True, True)
self.check_environment_unchanged()
def check_started_auth(self, bob):
"""
Check the set of processes needed to run auth only is started.
"""
self.check_started(bob, True, True, False)
self.check_environment_unchanged()
def check_started_resolver(self, bob):
"""
Check the set of processes needed to run resolver only is started.
"""
self.check_started(bob, True, False, True)
self.check_environment_unchanged()
def check_started_dhcp(self, bob, v4, v6):
"""
......@@ -426,6 +436,7 @@ class TestStartStopProcessesBob(unittest.TestCase):
# there should be exactly one DHCPv6 daemon (if v6==True)
self.assertEqual(v4==True, v4found==1)
self.assertEqual(v6==True, v6found==1)
self.check_environment_unchanged()
# Checks the processes started when starting neither auth nor resolver
# is specified.
......@@ -799,5 +810,7 @@ class TestBrittle(unittest.TestCase):
self.assertFalse(bob.runnable)
if __name__ == '__main__':
# store os.environ for test_unchanged_environment
original_os_environ = copy.deepcopy(os.environ)
isc.log.resetUnitTestRootLogger()
unittest.main()
......@@ -16,6 +16,7 @@
import socket
import struct
import os
import copy
import subprocess
from isc.log_messages.bind10_messages import *
from libutil_io_python import recv_fd
......@@ -207,7 +208,7 @@ class Creator(Parser):
# stdin as well as stdout, so we dup it before passing it there.
remote2 = socket.fromfd(remote.fileno(), socket.AF_UNIX,
socket.SOCK_STREAM)
env = os.environ
env = copy.deepcopy(os.environ)
env['PATH'] = path
self.__process = subprocess.Popen(['b10-sockcreator'], env=env,
stdin=remote.fileno(),
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment