Support setting custom username/password for the file server service 00/109200/2
authorBartek Grzybowski <b.grzybowski@partner.samsung.com>
Tue, 16 Jun 2020 14:39:44 +0000 (16:39 +0200)
committerBartek Grzybowski <b.grzybowski@partner.samsung.com>
Tue, 16 Jun 2020 14:46:59 +0000 (16:46 +0200)
Change-Id: I21964c4b8819444dd0aebdda117a11ba96f92038
Issue-ID: INT-1627
Signed-off-by: Bartek Grzybowski <b.grzybowski@partner.samsung.com>
test/mocks/mass-pnf-sim/MassPnfSim.py
test/mocks/mass-pnf-sim/conftest.py
test/mocks/mass-pnf-sim/pnf-sim-lightweight/docker-compose-template.yml
test/mocks/mass-pnf-sim/pnf-sim-lightweight/fix-sftp-perms-template.sh [new file with mode: 0755]
test/mocks/mass-pnf-sim/pnf-sim-lightweight/fix-sftp-perms.sh [deleted file]
test/mocks/mass-pnf-sim/test_cli.py
test/mocks/mass-pnf-sim/test_lifecycle.py
test/mocks/mass-pnf-sim/test_settings.py

index 43e3894..4907755 100755 (executable)
@@ -4,7 +4,7 @@ from subprocess import run, CalledProcessError
 import argparse
 import ipaddress
 from sys import exit
 import argparse
 import ipaddress
 from sys import exit
-from os import chdir, getcwd, path, popen, kill, getuid, stat, mkdir, getlogin
+from os import chdir, getcwd, path, popen, kill, getuid, stat, mkdir, getlogin, chmod
 from shutil import copytree, rmtree, move
 from json import loads, dumps
 from yaml import load, SafeLoader, dump
 from shutil import copytree, rmtree, move
 from json import loads, dumps
 from yaml import load, SafeLoader, dump
@@ -50,6 +50,8 @@ def get_parser():
                                   type=validate_ip, metavar='IP', required=True)
     parser_bootstrap.add_argument('--typefileserver', help='Type of the file server (SFTP/FTPS) to be included in the VES event',
                                   type=str, choices=['sftp', 'ftps'], required=True)
                                   type=validate_ip, metavar='IP', required=True)
     parser_bootstrap.add_argument('--typefileserver', help='Type of the file server (SFTP/FTPS) to be included in the VES event',
                                   type=str, choices=['sftp', 'ftps'], required=True)
+    parser_bootstrap.add_argument('--user', help='File server username', type=str, metavar='USERNAME', required=True)
+    parser_bootstrap.add_argument('--password', help='File server password', type=str, metavar='PASSWORD', required=True)
     parser_bootstrap.add_argument('--ipstart', help='IP address range beginning', type=validate_ip, metavar='IP', required=True)
     # Start command parser
     parser_start = subparsers.add_parser('start', help='Start instances')
     parser_bootstrap.add_argument('--ipstart', help='IP address range beginning', type=validate_ip, metavar='IP', required=True)
     # Start command parser
     parser_start = subparsers.add_parser('start', help='Start instances')
@@ -85,6 +87,8 @@ class MassPnfSim:
     sim_compose_template = 'docker-compose-template.yml'
     sim_vsftpd_template = 'config/vsftpd_ssl-TEMPLATE.conf'
     sim_vsftpd_config = 'config/vsftpd_ssl.conf'
     sim_compose_template = 'docker-compose-template.yml'
     sim_vsftpd_template = 'config/vsftpd_ssl-TEMPLATE.conf'
     sim_vsftpd_config = 'config/vsftpd_ssl.conf'
+    sim_sftp_script = 'fix-sftp-perms.sh'
+    sim_sftp_script_template = 'fix-sftp-perms-template.sh'
     sim_config = 'config/config.yml'
     sim_msg_config = 'config/config.json'
     sim_port = 5000
     sim_config = 'config/config.yml'
     sim_msg_config = 'config/config.json'
     sim_port = 5000
@@ -198,8 +202,8 @@ class MassPnfSim:
         '''Writes a yaml formatted configuration file for Java simulator app'''
         yml = {}
         yml['urlves'] = self.args.urlves
         '''Writes a yaml formatted configuration file for Java simulator app'''
         yml = {}
         yml['urlves'] = self.args.urlves
-        yml['urlsftp'] = f'sftp://onap:pano@{self.args.ipfileserver}:{port_sftp}'
-        yml['urlftps'] = f'ftps://onap:pano@{self.args.ipfileserver}:{port_ftps}'
+        yml['urlsftp'] = f'sftp://{self.args.user}:{self.args.password}@{self.args.ipfileserver}:{port_sftp}'
+        yml['urlftps'] = f'ftps://{self.args.user}:{self.args.password}@{self.args.ipfileserver}:{port_ftps}'
         yml['ippnfsim'] = pnf_sim_ip
         yml['typefileserver'] = self.args.typefileserver
         self.logger.debug(f'Generated simulator config:\n{dump(yml)}')
         yml['ippnfsim'] = pnf_sim_ip
         yml['typefileserver'] = self.args.typefileserver
         self.logger.debug(f'Generated simulator config:\n{dump(yml)}')
@@ -269,13 +273,19 @@ class MassPnfSim:
                                        IPFTPS = ip['ftps'], IPSFTP = ip['sftp'],
                                        FTPS_PASV_MIN = str(ftps_pasv_port_start),
                                        FTPS_PASV_MAX = str(ftps_pasv_port_end),
                                        IPFTPS = ip['ftps'], IPSFTP = ip['sftp'],
                                        FTPS_PASV_MIN = str(ftps_pasv_port_start),
                                        FTPS_PASV_MAX = str(ftps_pasv_port_end),
-                                       TIMEZONE = tzname[daylight])
+                                       TIMEZONE = tzname[daylight],
+                                       FILESERV_USER = self.args.user,
+                                       FILESERV_PASS = self.args.password)
             # generate vsftpd config file for the simulator instance
             self._generate_config_file(self.sim_vsftpd_template, self.sim_vsftpd_config,
                                        I = i, USER = getlogin(),
                                        FTPS_PASV_MIN = str(ftps_pasv_port_start),
                                        FTPS_PASV_MAX = str(ftps_pasv_port_end),
                                        IPFILESERVER = str(self.args.ipfileserver))
             # generate vsftpd config file for the simulator instance
             self._generate_config_file(self.sim_vsftpd_template, self.sim_vsftpd_config,
                                        I = i, USER = getlogin(),
                                        FTPS_PASV_MIN = str(ftps_pasv_port_start),
                                        FTPS_PASV_MAX = str(ftps_pasv_port_end),
                                        IPFILESERVER = str(self.args.ipfileserver))
+            # generate sftp permission fix script
+            self._generate_config_file(self.sim_sftp_script_template, self.sim_sftp_script,
+                                       I = i, FILESERV_USER = self.args.user)
+            chmod(f'{self.sim_dirname_pattern}{i}/{self.sim_sftp_script}', 0o755)
             # Run the 3GPP measurements file generator
             self._run_cmd(f'./ROP_file_creator.sh {i} &', f"{self.sim_dirname_pattern}{i}")
 
             # Run the 3GPP measurements file generator
             self._run_cmd(f'./ROP_file_creator.sh {i} &', f"{self.sim_dirname_pattern}{i}")
 
index 0665810..e6ee056 100644 (file)
@@ -12,7 +12,8 @@ def args_bootstrap(parser):
     return parser.parse_args(['bootstrap', '--count', str(SIM_INSTANCES),
                              '--urlves', URLVES, '--ipfileserver', IPFILESERVER,
                              '--typefileserver', TYPEFILESERVER, '--ipstart',
     return parser.parse_args(['bootstrap', '--count', str(SIM_INSTANCES),
                              '--urlves', URLVES, '--ipfileserver', IPFILESERVER,
                              '--typefileserver', TYPEFILESERVER, '--ipstart',
-                             IPSTART])
+                             IPSTART, '--user', FILESERVER_USER, '--password',
+                             FILESERVER_PASSWORD])
 
 @pytest.fixture(scope="module")
 def args_start(parser):
 
 @pytest.fixture(scope="module")
 def args_start(parser):
index 5a1bdac..8a59a11 100644 (file)
@@ -34,10 +34,10 @@ services:
     ports:
       - "${PORTSFTP}:22"
     volumes:
     ports:
       - "${PORTSFTP}:22"
     volumes:
-      - ./files/onap/:/home/onap/
+      - ./files/onap/:/home/${FILESERV_USER}/
       - ./fix-sftp-perms.sh:/etc/sftp.d/fix-sftp-perms.sh
     restart: on-failure
       - ./fix-sftp-perms.sh:/etc/sftp.d/fix-sftp-perms.sh
     restart: on-failure
-    command: onap:pano:1001
+    command: ${FILESERV_USER}:${FILESERV_PASS}:1001
 
   ftpes-server-vsftpd-${I}:
     container_name: ftpes-server-vsftpd-${I}
 
   ftpes-server-vsftpd-${I}:
     container_name: ftpes-server-vsftpd-${I}
@@ -49,8 +49,8 @@ services:
       - "${PORTFTPS}:21"
       - "${FTPS_PASV_MIN}-${FTPS_PASV_MAX}:${FTPS_PASV_MIN}-${FTPS_PASV_MAX}"
     environment:
       - "${PORTFTPS}:21"
       - "${FTPS_PASV_MIN}-${FTPS_PASV_MAX}:${FTPS_PASV_MIN}-${FTPS_PASV_MAX}"
     environment:
-      FTP_USER: onap
-      FTP_PASSWORD: pano
+      FTP_USER: ${FILESERV_USER}
+      FTP_PASSWORD: ${FILESERV_PASS}
       PASV_ADDRESS: localhost
       PASV_MIN_PORT: ${FTPS_PASV_MIN}
       PASV_MAX_PORT: ${FTPS_PASV_MAX}
       PASV_ADDRESS: localhost
       PASV_MIN_PORT: ${FTPS_PASV_MIN}
       PASV_MAX_PORT: ${FTPS_PASV_MAX}
diff --git a/test/mocks/mass-pnf-sim/pnf-sim-lightweight/fix-sftp-perms-template.sh b/test/mocks/mass-pnf-sim/pnf-sim-lightweight/fix-sftp-perms-template.sh
new file mode 100755 (executable)
index 0000000..52e69b7
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/bash
+chmod o+w /home/${FILESERV_USER}
diff --git a/test/mocks/mass-pnf-sim/pnf-sim-lightweight/fix-sftp-perms.sh b/test/mocks/mass-pnf-sim/pnf-sim-lightweight/fix-sftp-perms.sh
deleted file mode 100755 (executable)
index b9f4dae..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-chmod o+w /home/onap
index 3e4a60e..70c9b6c 100644 (file)
@@ -3,7 +3,8 @@ from MassPnfSim import MassPnfSim
 from test_settings import SIM_INSTANCES
 
 @pytest.mark.parametrize(('expect_string, cli_opts'), [
 from test_settings import SIM_INSTANCES
 
 @pytest.mark.parametrize(('expect_string, cli_opts'), [
-    ("bootstrap: error: the following arguments are required: --urlves, --ipfileserver, --typefileserver, --ipstart",
+    ("bootstrap: error: the following arguments are required: --urlves, --ipfileserver, --typefileserver, " +\
+     "--user, --password, --ipstart",
      ['bootstrap']),
     ("bootstrap: error: argument --typefileserver: invalid choice: 'dummy' (choose from 'sftp', 'ftps')",
      ['bootstrap', '--typefileserver', 'dummy']),
      ['bootstrap']),
     ("bootstrap: error: argument --typefileserver: invalid choice: 'dummy' (choose from 'sftp', 'ftps')",
      ['bootstrap', '--typefileserver', 'dummy']),
index dcd89c4..d98ea48 100644 (file)
@@ -54,8 +54,8 @@ def test_bootstrap(args_bootstrap, parser, caplog):
             yml = load(f, Loader=SafeLoader)
         assert URLVES == yml['urlves']
         assert TYPEFILESERVER == yml['typefileserver']
             yml = load(f, Loader=SafeLoader)
         assert URLVES == yml['urlves']
         assert TYPEFILESERVER == yml['typefileserver']
-        assert f'sftp://onap:pano@{IPFILESERVER}:{start_port + 1}' in yml['urlsftp']
-        assert f'ftps://onap:pano@{IPFILESERVER}:{start_port + 2}' in yml['urlftps']
+        assert f'sftp://{FILESERVER_USER}:{FILESERVER_PASSWORD}@{IPFILESERVER}:{start_port + 1}' in yml['urlsftp']
+        assert f'ftps://{FILESERVER_USER}:{FILESERVER_PASSWORD}@{IPFILESERVER}:{start_port + 2}' in yml['urlftps']
         assert str(ip_address(IPSTART) + ip_offset + instance_ip_offset) == yml['ippnfsim']
         start_port += 2
         print(yml['ippnfsim'])
         assert str(ip_address(IPSTART) + ip_offset + instance_ip_offset) == yml['ippnfsim']
         start_port += 2
         print(yml['ippnfsim'])
index a16046c..c8c2353 100644 (file)
@@ -2,6 +2,8 @@ SIM_INSTANCES = 2
 URLVES = 'http://127.0.0.1:10000/eventListener/v7'
 IPFILESERVER = '127.0.0.1'
 TYPEFILESERVER = 'sftp'
 URLVES = 'http://127.0.0.1:10000/eventListener/v7'
 IPFILESERVER = '127.0.0.1'
 TYPEFILESERVER = 'sftp'
+FILESERVER_USER = 'testuser'
+FILESERVER_PASSWORD = 'testpassword'
 IPSTART = '10.11.0.1'
 INSTANCE_CONFIG = 'config/config.yml'
 PNF_SIM_CONTAINER_NAME = 'pnf-simulator-'
 IPSTART = '10.11.0.1'
 INSTANCE_CONFIG = 'config/config.yml'
 PNF_SIM_CONTAINER_NAME = 'pnf-simulator-'