def execute(self, args): # Prompt the user for any require server credential arguments which # were not specified on the command line. _prompt_server_args(args) pk_filename = _private_key_filename(args.file_prefix) csr_as_string = self._process_csr_and_private_key( os.path.join(args.config_dir, pk_filename), args) svc = ManagementService(args.host, args.port, args.user, args.password, verify=args.truststore) data_responses = svc.invoke_command( self._PROVISION_COMMAND, {"csrString": csr_as_string}).split(",") if len(data_responses) < 3: raise Exception("{} Expected {}, Received {}. Value: {}".format( "Did not receive expected number of response elements.", 3, len(data_responses), data_responses)) brokers = self._brokers_for_config(data_responses[2].splitlines()) config_file = os.path.join(args.config_dir, _DXL_CONFIG_FILE_NAME) logger.info("Saving DXL config file to %s", config_file) dxlconfig = DxlClientConfig(_CA_BUNDLE_FILE_NAME, _cert_filename(args.file_prefix), pk_filename, brokers) dxlconfig.write(config_file) self._save_pem(data_responses[0], "ca bundle", os.path.join(args.config_dir, dxlconfig.broker_ca_bundle)) self._save_pem(data_responses[1], "client certificate", os.path.join(args.config_dir, dxlconfig.cert_file))
def test_write_in_memory_config(self): expected_data = os.linesep.join([ "[Certs]", "BrokerCertChain = mycabundle.pem", "CertFile = mycertfile.pem", "PrivateKey = myprivatekey.pem", "{}[Brokers]".format(os.linesep), "myid1 = myid1;8001;myhost1;10.10.100.1", "myid2 = myid2;8002;myhost2;10.10.100.2{}".format(os.linesep) ]) byte_stream = self.CapturedBytesIO() with patch.object(builtins, 'open', return_value=byte_stream) as mock_open: config = DxlClientConfig( "mycabundle.pem", "mycertfile.pem", "myprivatekey.pem", [ Broker("myhost1", "myid1", "10.10.100.1", 8001), Broker("myhost2", "myid2", "10.10.100.2", 8002) ]) config.write("myfile.txt") self.assertEqual(expected_data.encode(), byte_stream.bytes_captured) mock_open.assert_called_with("myfile.txt", "wb")