Changeset 65401ed4ea2de6867afad03da41e4ebfcb28bef9

Show
Ignore:
Timestamp:
01/11/10 15:14:50 (5 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1263222890 +0000
git-parent:

[f387f75fc42c18a92cc4f5b9c14bba9ea420b842]

git-author:
Theo Schlossnagle <jesus@omniti.com> 1263222890 +0000
Message:

basic stratcon test, refs #230

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • test/t/apiclient.pm

    rf387f75 r65401ed  
    3131    $self->{curl}->setopt(CURLOPT_CUSTOMREQUEST, $method); 
    3232    $self->{curl}->setopt(CURLOPT_URL, "https://$self->{host}:$self->{port}$uri"); 
    33  
    3433    my $response_body; 
    3534 
  • test/t/testconfig.pm

    rf387f75 r65401ed  
    11package testconfig; 
     2use Fcntl; 
    23use DBI; 
    34use Cwd; 
    45use Exporter 'import'; 
    56use Data::Dumper; 
     7use strict; 
     8use vars qw/@EXPORT/; 
    69 
    710my $noit_pid = 0; 
     
    1114@EXPORT = qw($NOIT_TEST_DB $NOIT_TEST_DB_PORT 
    1215             $NOIT_API_PORT $NOIT_CLI_PORT 
     16             $STRATCON_API_PORT $STRATCON_CLI_PORT 
    1317             pg make_noit_config start_noit stop_noit 
    14              $MODULES_DIR $LUA_DIR $all_noit_modules); 
     18             make_stratcon_config start_stratcon stop_stratcon 
     19             $MODULES_DIR $LUA_DIR $all_noit_modules $all_stratcon_modules); 
    1520 
    1621our $all_noit_modules = { 
     
    3237our $NOIT_API_PORT = 42364; 
    3338our $NOIT_CLI_PORT = 42365; 
     39our $STRATCON_API_PORT = 42366; 
     40our $STRATCON_CLI_PORT = 42367; 
     41our $STRATCON_WEB_PORT = 42368; 
    3442 
    3543our ($MODULES_DIR, $LUA_DIR); 
     
    116124  my ($o, $opts) = @_; 
    117125  my $cwd = $opts->{cwd}; 
    118   $opts->{modules} = $all_noit_modules unless exists($opts->{modules}); 
    119126  print $o qq{ 
    120127  <modules directory="$cwd/../../src/modules"> 
     
    123130    </loader> 
    124131}; 
     132  foreach(keys %{$opts->{generics}}) { 
     133    print $o qq{    <generic };  
     134    print $o qq{ image="$opts->{generics}->{$_}->{image}"} 
     135      if(exists($opts->{generics}->{$_}->{image})); 
     136    print $o qq{ name="$_"/>\n}; 
     137  } 
    125138  foreach(keys %{$opts->{modules}}) { 
    126139    print $o qq{    <module };  
     
    135148  print $o qq{</modules>\n}; 
    136149} 
    137 sub make_listeners_config { 
    138   my ($o, $opts) = @_; 
    139   my $cwd = $opts->{cwd}; 
    140   $options->{noit_api_port} ||= $NOIT_API_PORT; 
    141   $options->{noit_cli_port} ||= $NOIT_CLI_PORT; 
     150sub make_noit_listeners_config { 
     151  my ($o, $opts) = @_; 
     152  my $cwd = $opts->{cwd}; 
     153  $opts->{noit_api_port} ||= $NOIT_API_PORT; 
     154  $opts->{noit_cli_port} ||= $NOIT_CLI_PORT; 
    142155  print $o qq{ 
    143156  <listeners> 
     
    149162    </sslconfig> 
    150163    <consoles type="noit_console"> 
    151       <listener address="*" port="$options->{noit_cli_port}"> 
     164      <listener address="*" port="$opts->{noit_cli_port}"> 
    152165        <config> 
    153166          <line_protocol>telnet</line_protocol> 
     
    155168      </listener> 
    156169    </consoles> 
    157     <listener type="control_dispatch" address="*" port="$options->{noit_api_port}" ssl="on"> 
     170    <listener type="control_dispatch" address="*" port="$opts->{noit_api_port}" ssl="on"> 
    158171      <config> 
    159172        <log_transit_feed_name>feed</log_transit_feed_name> 
     
    186199  my $cwd = $opts->{cwd}; 
    187200  print $o qq{  <checks max_initial_stutter="1000" filterset="default">\n}; 
    188   do_check_print($o, $options->{checks}); 
     201  do_check_print($o, $opts->{checks}); 
    189202  print $o qq{  </checks>\n}; 
    190203} 
     
    211224  my $options = shift; 
    212225  $options->{cwd} ||= cwd(); 
     226  $options->{modules} = $all_noit_modules unless exists($options->{modules}); 
    213227  my $cwd = $options->{cwd}; 
    214228  my $file = "$cwd/logs/${name}_noit.conf"; 
     
    219233  make_logs_config($o, $options); 
    220234  make_modules_config($o, $options); 
    221   make_listeners_config($o, $options); 
     235  make_noit_listeners_config($o, $options); 
    222236  make_checks_config($o, $options); 
    223237  make_filtersets_config($o, $options); 
    224238  print $o qq{</noit>\n}; 
     239  close($o); 
     240  return $file; 
     241} 
     242 
     243sub make_stratcon_noits_config { 
     244  my ($o, $opts) = @_; 
     245  my $cwd = $opts->{cwd}; 
     246  $opts->{noit_api_port} ||= $NOIT_API_PORT; 
     247  print $o qq{ 
     248  <noits> 
     249    <sslconfig> 
     250      <certificate_file>$cwd/../test-stratcon.crt</certificate_file> 
     251      <key_file>$cwd/../test-stratcon.key</key_file> 
     252      <ca_chain>$cwd/../test-ca.crt</ca_chain> 
     253    </sslconfig> 
     254    <config> 
     255      <reconnect_initial_interval>1000</reconnect_initial_interval> 
     256      <reconnect_maximum_interval>15000</reconnect_maximum_interval> 
     257    </config> 
     258}; 
     259  foreach my $n (@{$opts->{noits}}) { 
     260    print $o qq{    <noit}; 
     261    while (my ($k,$v) = each %$n) { 
     262      print $o qq{ $k=\"$v\"}; 
     263    } 
     264    print $o qq{/>\n}; 
     265  } 
     266  print $o qq{</noits>\n}; 
     267} 
     268 
     269sub make_stratcon_listeners_config { 
     270  my ($o, $opts) = @_; 
     271  my $cwd = $opts->{cwd}; 
     272  $opts->{stratcon_api_port} ||= $STRATCON_API_PORT; 
     273  $opts->{stratcon_web_port} ||= $STRATCON_WEB_PORT; 
     274  print $o qq{ 
     275  <listeners> 
     276    <sslconfig> 
     277      <certificate_file>$cwd/../test-stratcon.crt</certificate_file> 
     278      <key_file>$cwd/../test-stratcon.key</key_file> 
     279      <ca_chain>$cwd/../test-ca.crt</ca_chain> 
     280    </sslconfig> 
     281    <realtime type="http_rest_api"> 
     282      <listener address="*" port="$opts->{stratcon_web_port}"> 
     283        <config> 
     284          <hostname>stratcon.noit.example.com</hostname> 
     285          <document_domain>noit.example.com</document_domain> 
     286        </config> 
     287      </listener> 
     288    </realtime> 
     289    <listener type="control_dispatch" address="*" port="$opts->{stratcon_api_port}" ssl="on" /> 
     290  </listeners> 
     291}; 
     292} 
     293 
     294sub make_iep_config { 
     295  my ($o, $opts) = @_; 
     296  my $cwd = $opts->{cwd}; 
     297  $opts->{iep}->{disabled} ||= 'false'; 
     298  mkdir("$cwd/logs/$opts->{name}_iep_root"); 
     299  open(my $run, "<$cwd/../../src/java/run-iep.sh") || 
     300    BAIL_OUT("cannot open source run-iep.sh"); 
     301  sysopen(my $newrun, "$cwd/logs/$opts->{name}_iep_root/run-iep.sh", O_WRONLY|O_CREAT, 0755) || 
     302    BAIL_OUT("cannot open target run-iep.sh"); 
     303  while(<$run>) { 
     304    s%^DIRS="%DIRS="$cwd/../../src/java $cwd/../../src/java/lib %; 
     305    print $newrun $_; 
     306  } 
     307  close($run); 
     308  close($newrun); 
     309  print $o qq{ 
     310  <iep disabled="$opts->{iep}->{disabled}"> 
     311    <start directory="$cwd/logs/$opts->{name}_iep_root" 
     312           command="$cwd/logs/$opts->{name}_iep_root/run-iep.sh" /> 
     313}; 
     314  foreach my $mqt (keys %{$opts->{iep}->{mq}}) { 
     315    print $o qq{    <mq type="$mqt">\n}; 
     316    while (my ($k,$v) = each %{$opts->{iep}->{mq}->{mqt}}) { 
     317      print $o qq{      <$k>$v</$k>\n}; 
     318    } 
     319    print $o qq{    </mq>\n}; 
     320  } 
     321  foreach my $bt (keys %{$opts->{iep}->{broker}}) { 
     322    print $o qq{    <broker adapter="$bt">\n}; 
     323    while (my ($k,$v) = each %{$opts->{iep}->{broker}->{bt}}) { 
     324      print $o qq{      <$k>$v</$k>\n}; 
     325    } 
     326    print $o qq{    </broker>\n}; 
     327  } 
     328  print $o qq{</iep>\n}; 
     329} 
     330sub make_database_config { 
     331  my ($o, $opts) = @_; 
     332  my $cwd = $opts->{cwd}; 
     333  print $o qq{ 
     334  <database> 
     335    <journal> 
     336      <path>$cwd/logs/$opts->{name}_stratcon.persist</path> 
     337    </journal> 
     338    <dbconfig> 
     339      <host>localhost</host> 
     340      <port>$NOIT_TEST_DB_PORT</port> 
     341      <dbname>reconnoiter</dbname> 
     342      <user>stratcon</user> 
     343      <password>stratcon</password> 
     344    </dbconfig> 
     345    <statements> 
     346      <allchecks><![CDATA[ 
     347        SELECT remote_address, id, target, module, name 
     348          FROM check_currently 
     349      ]]></allchecks> 
     350      <findcheck><![CDATA[ 
     351        SELECT remote_address, id, target, module, name 
     352          FROM check_currently 
     353         WHERE sid = \$1 
     354      ]]></findcheck> 
     355      <allstoragenodes><![CDATA[ 
     356        SELECT storage_node_id, fqdn, dsn 
     357          FROM stratcon.storage_node 
     358      ]]></allstoragenodes> 
     359      <findstoragenode><![CDATA[ 
     360        SELECT fqdn, dsn 
     361          FROM stratcon.storage_node 
     362         WHERE storage_node_id = \$1 
     363      ]]></findstoragenode> 
     364      <mapallchecks><![CDATA[ 
     365        SELECT id, sid, noit as remote_cn, storage_node_id, fqdn, dsn 
     366          FROM stratcon.map_uuid_to_sid LEFT JOIN stratcon.storage_node USING (storage_node_id) 
     367      ]]></mapallchecks> 
     368      <mapchecktostoragenode><![CDATA[ 
     369        SELECT o_storage_node_id as storage_node_id, o_sid as sid, 
     370               o_fqdn as fqdn, o_dsn as dsn 
     371          FROM stratcon.map_uuid_to_sid(\$1,\$2) 
     372      ]]></mapchecktostoragenode> 
     373      <check><![CDATA[ 
     374        INSERT INTO check_archive_%Y%m%d 
     375                    (remote_address, whence, sid, id, target, module, name) 
     376             VALUES (\$1, 'epoch'::timestamptz + (\$2 || ' seconds')::interval, 
     377                     \$3, \$4, \$5, \$6, \$7) 
     378      ]]></check> 
     379      <status><![CDATA[ 
     380        INSERT INTO check_status_archive_%Y%m%d 
     381                    (whence, sid, state, availability, duration, status) 
     382             VALUES ('epoch'::timestamptz + (\$1 || ' seconds')::interval, 
     383                     \$2, \$3, \$4, \$5, \$6) 
     384      ]]></status> 
     385      <metric_numeric><![CDATA[ 
     386        INSERT INTO metric_numeric_archive_%Y%m%d 
     387                    (whence, sid, name, value) 
     388             VALUES ('epoch'::timestamptz + (\$1 || ' seconds')::interval, 
     389                     \$2, \$3, \$4) 
     390      ]]></metric_numeric> 
     391      <metric_text><![CDATA[ 
     392        INSERT INTO metric_text_archive_%Y%m%d 
     393                    ( whence, sid, name,value) 
     394             VALUES ('epoch'::timestamptz + (\$1 || ' seconds')::interval, 
     395                     \$2, \$3, \$4) 
     396      ]]></metric_text> 
     397      <config><![CDATA[ 
     398        SELECT stratcon.update_config 
     399               (\$1, \$2, \$3, 
     400                'epoch'::timestamptz + (\$4 || ' seconds')::interval, 
     401                \$5) 
     402      ]]></config> 
     403      <findconfig><![CDATA[ 
     404        SELECT config FROM stratcon.current_node_config WHERE remote_cn = \$1 
     405      ]]></findconfig> 
     406    </statements> 
     407  </database> 
     408}; 
     409} 
     410 
     411sub make_stratcon_config { 
     412  my $name = shift; 
     413  my $options = shift; 
     414  $options->{cwd} ||= cwd(); 
     415  $options->{generics} ||= { 'stomp_driver' => { image => 'stomp_driver' } }; 
     416  $options->{iep}->{mq} ||= { 'stomp' => {} }; 
     417  my $cwd = $options->{cwd}; 
     418  my $file = "$cwd/logs/${name}_stratcon.conf"; 
     419  open (my $o, ">$file") || BAIL_OUT("can't write config: $file"); 
     420  print $o qq{<?xml version="1.0" encoding="utf8" standalone="yes"?>\n}; 
     421  print $o qq{<stratcon>}; 
     422  make_eventer_config($o, $options); 
     423  make_stratcon_noits_config($o, $options); 
     424  make_logs_config($o, $options); 
     425  make_modules_config($o, $options); 
     426  make_stratcon_listeners_config($o, $options); 
     427  make_database_config($o, $options); 
     428  make_iep_config($o, $options); 
     429  print $o qq{</stratcon>\n}; 
    225430  close($o); 
    226431  return $file; 
     
    254459} 
    255460 
     461sub start_stratcon { 
     462  my $name = shift; 
     463  my $options = shift; 
     464  $options->{name} = $name; 
     465  return 0 if $stratcon_pid; 
     466  my $conf = make_stratcon_config($name, $options); 
     467  $stratcon_pid = fork(); 
     468  mkdir "logs"; 
     469  if($stratcon_pid == 0) { 
     470    close(STDIN); 
     471    open(STDIN, "</dev/null"); 
     472    close(STDOUT); 
     473    open(STDOUT, ">/dev/null"); 
     474    close(STDERR); 
     475    open(STDERR, ">logs/${name}_stratcon.log"); 
     476    my @args = ( 'stratcond', '-D', '-c', $conf ); 
     477    exec { '../../src/stratcond' } @args; 
     478    exit(-1); 
     479  } 
     480  return $stratcon_pid; 
     481} 
     482sub stop_stratcon { 
     483  kill 9, $stratcon_pid if($stratcon_pid && kill 1, $stratcon_pid); 
     484  $stratcon_pid = 0; 
     485  return 1; 
     486} 
     487 
    256488END { 
    257489  kill 9, $noit_pid if($noit_pid && kill 1, $noit_pid);