diff --git a/bin/create_subscribers.pl b/bin/create_subscribers.pl index 796ade10..cec30020 100755 --- a/bin/create_subscribers.pl +++ b/bin/create_subscribers.pl @@ -261,5 +261,8 @@ sub main return; } +my $ids_path = abs_path($ARGV[1]); +print "load $ids_path\n"; +$ids = LoadFile($ids_path); main(LoadFile(abs_path($ARGV[0]))); -DumpFile(abs_path($ARGV[1]), $ids); +DumpFile($ids_path, $ids); diff --git a/bin/provide_scenario.sh b/bin/provide_scenario.sh index bf651d0b..c012df8d 100755 --- a/bin/provide_scenario.sh +++ b/bin/provide_scenario.sh @@ -98,8 +98,6 @@ create_voip_prefs() { echo "$(date) - Creating peers" "${BIN_DIR}/create_peers.pl" \ "${SCEN_CHECK_DIR}/peer.yml" "${SCEN_CHECK_DIR}/scenario_ids.yml" - # REMOVE ME!! fix for REST API - ngcp-kamcmd proxy lcr.reload fi if [ -f "${SCEN_CHECK_DIR}/lnp.yml" ]; then @@ -181,7 +179,13 @@ scenario_csv() { find "${SCEN_CHECK_DIR}" -name 'sipp_scenario_responder*_reg.xml' -exec rm {} \; find "${SCEN_CHECK_DIR}" -name '*.csv' -exec rm {} \; echo "$(date) - Generating csv/reg.xml files" - if ! "${BIN_DIR}/scenario.pl" "${SCEN_CHECK_DIR}/scenario.yml" ; then + echo "IP=${IP} PORT=${PORT} MPORT=${MPORT}" + echo "PEER_IP=${PEER_IP} PEER_PORT=${PEER_PORT} PEER_MPORT=${PEER_MPORT}" + if ! "${BIN_DIR}/scenario.pl" \ + --ip="${IP}" --port="${PORT}" --mport="${MPORT}" \ + --peer-ip="${PEER_IP}" --peer-port="${PEER_PORT}" --peer-mport="${PEER_MPORT}" \ + "${SCEN_CHECK_DIR}/scenario.yml" "${SCEN_CHECK_DIR}/scenario_ids.yml" + then echo "Error creating csv files" exit 2 fi @@ -195,27 +199,45 @@ scenario_csv() { create() { local DOMAIN=$1 delete "${DOMAIN}" # just to be sure nothing is there + scenario_csv "${DOMAIN}" echo "$(date) - Creating ${DOMAIN}" create_voip "${DOMAIN}" echo "$(date) - Adding prefs" create_voip_prefs - scenario_csv "${DOMAIN}" } usage() { cat < +# Copyright: 2013-2021 Sipwise Development Team # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,7 +26,8 @@ use Cwd 'abs_path'; use File::Basename; use File::Spec; use IO::File; -use YAML::XS; +use YAML::XS qw(DumpFile LoadFile); +use Hash::Merge qw(merge); use Text::CSV; use Template; use Try::Tiny; @@ -34,23 +35,48 @@ use Data::Dumper; sub usage { - my $output = "usage: scenario.pl [-h] scenario.yml\n"; + my $output = "usage: scenario.pl [options] scenario.yml scenario_ids.yml\n"; $output .= "Options:\n"; $output .= "\t-h: this help\n"; + $output .= "\t--ip: IP\n"; + $output .= "\t--port: base sipp port\n"; + $output .= "\t--mport: base sipp media port\n"; + $output .= "\t--peer-ip: peer IP\n"; + $output .= "\t--peer-port: peer base sipp port\n"; + $output .= "\t--peer-mport: peer base sipp media port\n"; return $output } +my $ids = {}; my $help = 0; -my $del = 0; -GetOptions ("h|help" => \$help) - or die("Error in command line arguments\n".usage()); +my $net_data = { + scen => { + ip => "127.126.0.1", + port => 51602, + mport => 45003, + }, + peer => { + ip => "127.0.2.1", + port => 51602, + mport => 45003, + }, +}; +GetOptions ( + "h|help" => \$help, + "ip=s" => \$net_data->{scen}->{ip}, + "port=i" => \$net_data->{scen}->{port}, + "mport=i" => \$net_data->{scen}->{mport}, + "peer-ip=s" => \$net_data->{peer}->{ip}, + "peer-port=i" => \$net_data->{peer}->{port}, + "peer-mport=i" => \$net_data->{peer}->{mport}, +) or die("Error in command line arguments\n".usage()); die(usage()) unless (!$help); -die("Wrong number of arguments\n".usage()) unless ($#ARGV == 0); +die("Wrong number of arguments[$#ARGV]\n".usage()) unless ($#ARGV == 1); my $filename = abs_path($ARGV[0]); our $base_check_dir = dirname($filename); -my $cf = YAML::XS::LoadFile($filename); +my $cf = LoadFile($filename); our $bin_dir = '/usr/share/kamailio-config-tests/bin'; our $template_dir = '/usr/share/kamailio-config-tests/scenarios/templates'; @@ -120,20 +146,62 @@ sub get_subs_info return; } +sub generate_net_values +{ + my $net = shift; + my $res = { + ip => $net->{ip}, + port => $net->{port}, + mport => $net->{mport}, + }; + $net->{port} += 1; + $net->{mport} += 3; + return $res; +} + +sub peer_data +{ + my $peer_host = shift; + if(not defined($ids->{$peer_host})) { + $ids->{$peer_host} = generate_net_values($net_data->{peer}); + } + return $ids->{$peer_host}; +} + sub network_data { my $scen = shift; - my $idx_port = 50603; - my $idx_mport = 46003; + my $hm = Hash::Merge->new('RIGHT_PRECEDENT'); + my $data = {}; - $scen->{port} = 51602; - $scen->{mport} = 45003; + if(defined($scen->{peer_host})) { + $data->{peer} = $scen->{peer_host}; + $data = $hm->merge($data, peer_data($scen->{peer_host})); + } else { + $data = generate_net_values($net_data->{scen}); + } + $data->{username} = $scen->{username}; + $scen->{ip} = $data->{ip}; + $scen->{port} = $data->{port}; + $scen->{mport} = $data->{mport}; + if(defined($scen->{domain})) { $data->{domain} = $scen->{domain}; } foreach my $resp (@{$scen->{responders}}) { - $resp->{port} = $idx_port++; - $resp->{mport} = $idx_mport; - $idx_mport = $idx_mport + 3; + my $rdata = {}; + if(defined($resp->{peer_host})) { + $rdata->{peer} = $resp->{peer_host}; + $rdata = $hm->merge($rdata, peer_data($resp->{peer_host})); + } else { + $rdata = generate_net_values($net_data->{scen}); + } + $rdata->{username} = $resp->{username}; + $resp->{ip} = $rdata->{ip}; + $resp->{port} = $rdata->{port}; + $resp->{mport} = $rdata->{mport}; + if(defined($resp->{domain})) { $rdata->{domain} = $resp->{domain}; } + push @{$data->{responders}}, $rdata; } + push @{$ids->{scenarios}}, $data; } sub generate @@ -280,3 +348,4 @@ sub generate_foreign_dom generate($cf); generate_presence($cf); +DumpFile(abs_path($ARGV[1]), $ids);