Use dnsmasq to cache DNS queries 73/39873/4
authorCédric Ollivier <cedric.ollivier@orange.com>
Tue, 22 Aug 2017 13:01:10 +0000 (15:01 +0200)
committerCédric Ollivier <cedric.ollivier@orange.com>
Tue, 22 Aug 2017 14:15:04 +0000 (16:15 +0200)
It's mandatory for clearwater_ims as musl's resolver queries
nameservers all in parallel and accepts whichever response arrives
first [1].

[1] http://wiki.musl-libc.org/wiki/Functional_differences_from_glibc#Name_Resolver_.2F_DNS

Change-Id: I01a17436279a0be2fac1b27b73052edc594c33e0
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
docker/Dockerfile
docker/vnf/Dockerfile
functest/opnfv_tests/vnf/ims/clearwater_ims_base.py

index 8c7e4b0..0e896d6 100644 (file)
@@ -38,6 +38,7 @@ build-essential \
 bundler \
 crudini \
 curl \
+dnsmasq \
 gcc \
 git \
 libffi-dev \
index 70c13ab..d4f18c4 100644 (file)
@@ -3,7 +3,7 @@ FROM opnfv/functest-core
 ARG VIMS_TAG=stable
 
 RUN apk --no-cache add --update \
-        ruby ruby-dev ruby-bundler ruby-irb ruby-rdoc \
+        ruby ruby-dev ruby-bundler ruby-irb ruby-rdoc dnsmasq \
         procps git g++ make libxslt-dev libxml2-dev zlib-dev libffi-dev && \
     git clone --depth 1 -b $VIMS_TAG https://github.com/boucherv-orange/clearwater-live-test /src/vims-test && \
     rm -r /src/vims-test/.git && \
index 1c3f69c..8851f7a 100644 (file)
@@ -10,7 +10,9 @@ import json
 import logging
 import os
 import pkg_resources
+import shlex
 import shutil
+import subprocess
 import time
 
 import requests
@@ -109,18 +111,17 @@ class ClearwaterOnBoardingBase(vnf.VnfOnBoarding):
                                  bono_ip=None, ellis_ip=None,
                                  signup_code='secret'):
         self.logger.info('Run Clearwater live test')
-        nameservers = ft_utils.get_resolvconf_ns()
-        resolvconf = ['{0}{1}{2}'.format(os.linesep, 'nameserver ', ns)
-                      for ns in nameservers]
-        self.logger.debug('resolvconf: %s', resolvconf)
         dns_file = '/etc/resolv.conf'
         dns_file_bak = '/etc/resolv.conf.bak'
+        self.logger.debug('Backup %s -> %s', dns_file, dns_file_bak)
         shutil.copy(dns_file, dns_file_bak)
-        script = ('echo -e "nameserver {0}{1}" > {2};'
-                  'cd {3};'
-                  'rake test[{4}] SIGNUP_CODE={5}'
-                  .format(dns_ip,
-                          ''.join(resolvconf),
+        cmd = ("dnsmasq -d -u root --server=/clearwater.opnfv/{0} "
+               "-r /etc/resolv.conf.bak".format(dns_ip))
+        dnsmasq_process = subprocess.Popen(shlex.split(cmd))
+        script = ('echo -e "nameserver {0}" > {1};'
+                  'cd {2};'
+                  'rake test[{3}] SIGNUP_CODE={4}'
+                  .format('127.0.0.1',
                           dns_file,
                           self.test_dir,
                           public_domain,
@@ -135,7 +136,7 @@ class ClearwaterOnBoardingBase(vnf.VnfOnBoarding):
         ft_utils.execute_command(cmd,
                                  error_msg='Clearwater live test failed',
                                  output_file=output_file)
-
+        dnsmasq_process.kill()
         with open(dns_file_bak, 'r') as bak_file:
             result = bak_file.read()
             with open(dns_file, 'w') as f: