diff options
Diffstat (limited to 'vespaclient/src/perl/test/Yahoo/Vespa')
13 files changed, 0 insertions, 1513 deletions
diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/ArgParserTest.pl b/vespaclient/src/perl/test/Yahoo/Vespa/ArgParserTest.pl deleted file mode 100644 index 870f31c1dfa..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/ArgParserTest.pl +++ /dev/null @@ -1,313 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -use Test::More; - -BEGIN { use_ok( 'Yahoo::Vespa::ArgParser' ); } -require_ok( 'Yahoo::Vespa::ArgParser' ); - -BEGIN { *ArgParser:: = *Yahoo::Vespa::ArgParser:: } - -use TestUtils::OutputCapturer; - -TestUtils::OutputCapturer::useColors(1); - -&testSyntaxPage(); - -TestUtils::OutputCapturer::useColors(0); - -&testStringOption(); -&testIntegerOption(); -&testHostOption(); -&testPortOption(); -&testFlagOption(); -&testCountOption(); -&testComplexParsing(); -&testArguments(); - -done_testing(); - -exit(0); - -sub testSyntaxPage { - # Empty - ArgParser::writeSyntaxPage(); - my $expected = <<EOS; -Usage: ArgParserTest.pl -EOS - isOutput($expected, '', 'Empty syntax page'); - - # Built in only - Yahoo::Vespa::ArgParser::registerInternalParameters(); - ArgParser::writeSyntaxPage(); - $expected = <<EOS; -Usage: ArgParserTest.pl [Options] - -Options: - -h --help : Show this help page. - -v : Create more verbose output. - -s : Create less verbose output. - --show-hidden : Also show hidden undocumented debug options. -EOS - isOutput($expected, '', 'Syntax page with default args'); - - # Actual example - ArgParser::initialize(); - - setProgramBinaryName("testprog"); - setProgramDescription( - "This is a multiline description of what the program is that " - . "should be split accordingly to look nice. For now probably hard " - . "coded, but can later be extended to detect terminal width."); - my $arg; - setArgument(\$arg, "Test Arg", "This argument is not used for anything.", - OPTION_REQUIRED); - my $optionalArg; - setArgument(\$arg, "Another Test Arg", - "This argument is not used for anything either."); - - setOptionHeader("My prog headers. Also a long line just to check that it " - . "is also split accordingly."); - my $stringval; - my $flag; - my $intval; - setStringOption(['string', 'j'], \$stringval, "A random string"); - setFlagOption(['flag', 'f'], \$flag, "A flag option with a pretty long " - . "description that might need to be split into multiple lines."); - setOptionHeader("More options"); - setIntegerOption(['integer', 'i'], \$intval, "A secret integer option.", - OPTION_SECRET); - Yahoo::Vespa::ArgParser::registerInternalParameters(); - ArgParser::writeSyntaxPage(); - $expected = <<EOS; -This is a multiline description of what the program is that should be split -accordingly to look nice. For now probably hard coded, but can later be -extended to detect terminal width. - -Usage: testprog [Options] <Test Arg> [Another Test Arg] - -Arguments: - Test Arg : This argument is not used for anything. - Another Test Arg : This argument is not used for anything either. - -Options: - -h --help : Show this help page. - -v : Create more verbose output. - -s : Create less verbose output. - --show-hidden : Also show hidden undocumented debug options. - -My prog headers. Also a long line just to check that it is also split -accordingly. - --string -j : A random string - --flag -f : A flag option with a pretty long description that might need - to be split into multiple lines. -EOS - isOutput($expected, '', 'Actual syntax page example'); - - ArgParser::setShowHidden(1); - ArgParser::writeSyntaxPage(); - $expected = <<EOS; -This is a multiline description of what the program is that should be split -accordingly to look nice. For now probably hard coded, but can later be -extended to detect terminal width. - -Usage: testprog [Options] <Test Arg> [Another Test Arg] - -Arguments: - Test Arg : This argument is not used for anything. - Another Test Arg : This argument is not used for anything either. - -Options: - -h --help : Show this help page. - -v : Create more verbose output. - -s : Create less verbose output. - --show-hidden : Also show hidden undocumented debug options. - -My prog headers. Also a long line just to check that it is also split -accordingly. - --string -j : A random string - --flag -f : A flag option with a pretty long description that might need - to be split into multiple lines. - -More options - --integer -i : A secret integer option. - - --nocolors : Do not use ansi colors in print. -EOS - isOutput($expected, '', 'Actual syntax page example with hidden'); -} - -sub setUpParseTest { - Yahoo::Vespa::ArgParser::initialize(); -} - -sub parseFail { - my ($optstring, $expectedError) = @_; - my @args = split(/\s+/, $optstring); - my $name = $expectedError; - chomp $name; - if (length $name > 40 && $name =~ /^(.{20,70}?)\./) { - $name = $1; - } elsif (length $name > 55 && $name =~ /^(.{40,55})\s/) { - $name = $1; - } - ok( !ArgParser::parseCommandLineArguments(\@args), - "Expected parse failure: $name"); - isOutput('', $expectedError, $name); -} - -sub parseSuccess { - my ($optstring, $testname) = @_; - my @args = split(/\s+/, $optstring); - ok( ArgParser::parseCommandLineArguments(\@args), - "Expected parse success: $testname"); - isOutput('', '', $testname); -} - -sub testStringOption { - &setUpParseTest(); - my $val; - setStringOption(['s'], \$val, 'foo'); - parseFail("-s", "Too few arguments for option 's'\.\n"); - ok( !defined $val, 'String value unset on failure' ); - parseSuccess("-s foo", "String option"); - ok( $val eq 'foo', "String value set" ); -} - -sub testIntegerOption { - &setUpParseTest(); - my $val; - setIntegerOption(['i'], \$val, 'foo'); - parseFail("-i", "Too few arguments for option 'i'\.\n"); - ok( !defined $val, 'Integer value unset on failure' ); - parseFail("-i foo", "Invalid value 'foo' given to integer option 'i'\.\n"); - parseFail("-i 0.5", "Invalid value '0.5' given to integer option 'i'\.\n"); - parseSuccess("-i 5", "Integer option"); - ok( $val == 5, "Integer value set" ); - # Don't allow numbers as first char in id, so this can be detected as - # argument for integer. - parseSuccess("-i -8", "Negative integer option"); - ok( $val == -8, "Integer value set" ); - # Test big numbers - parseSuccess("-i 8000000000", "Big integer option"); - ok( $val / 1000000 == 8000, "Integer value set" ); - parseSuccess("-i -8000000000", "Big negative integer option"); - ok( $val / 1000000 == -8000, "Integer value set" ); -} - -sub testHostOption { - &setUpParseTest(); - my $val; - setHostOption(['h'], \$val, 'foo'); - parseFail("-h", "Too few arguments for option 'h'\.\n"); - ok( !defined $val, 'Host value unset on failure' ); - parseFail("-h 5", "Invalid host '5' given to option 'h'\. Not a valid host\n"); - parseFail("-h non.existing.host.no", "Invalid host 'non.existing.host.no' given to option 'h'\. Not a valid host\n"); - parseSuccess("-h localhost", "Host option set"); - is( $val, 'localhost', 'Host value set' ); -} - -sub testPortOption { - &setUpParseTest(); - my $val; - setPortOption(['p'], \$val, 'foo'); - parseFail("-p", "Too few arguments for option 'p'\.\n"); - ok( !defined $val, 'Host value unset on failure' ); - parseFail("-p -1", "Invalid value '-1' given to port option 'p'\. Must be an unsigned 16 bit\ninteger\.\n"); - parseFail("-p 65536", "Invalid value '65536' given to port option 'p'\. Must be an unsigned 16 bit\ninteger\.\n"); - parseSuccess("-p 65535", "Port option set"); - is( $val, 65535, 'Port value set' ); -} - -sub testFlagOption { - &setUpParseTest(); - my $val; - setFlagOption(['f'], \$val, 'foo'); - setFlagOption(['g'], \$val2, 'foo', OPTION_INVERTEDFLAG); - parseFail("-f 3", "Unhandled argument '3'\.\n"); - parseSuccess("-f", "First flag option set"); - is( $val, 1, 'Flag value set' ); - is( $val2, 1, 'Flag value set' ); - parseSuccess("-f", "First flag option reset"); - is( $val, 1, 'Flag value set' ); - is( $val2, 1, 'Flag value set' ); - parseSuccess("-g", "Second flag option set"); - is( $val, 0, 'Flag value set' ); - is( $val2, 0, 'Flag value set' ); - parseSuccess("-fg", "Both flag options set"); - is( $val, 1, 'Flag value set' ); - is( $val2, 0, 'Flag value set' ); -} - -sub testCountOption { - &setUpParseTest(); - my $val; - setUpCountingOption(['u'], \$val, 'foo'); - setDownCountingOption(['d'], \$val, 'foo'); - parseSuccess("", "Count not set"); - ok( !defined $val, 'Count value not set if not specified' ); - parseSuccess("-u", "Counting undefined"); - is( $val, 1, 'Count value set' ); - parseSuccess("-d", "Counting undefined - down"); - is( $val, -1, 'Count value set' ); - parseSuccess("-uuuud", "Counting both ways"); - is( $val, 3, 'Count value set' ); -} - -sub testComplexParsing { - &setUpParseTest(); - my $count; - my $int; - my $string; - setUpCountingOption(['u', 'up'], \$count, 'foo'); - setIntegerOption(['i', 'integer'], \$int, 'bar'); - setStringOption(['s', 'string'], \$string, 'baz'); - parseSuccess("-uis 3 foo", "Complex parsing managed"); - is( $count, 1, 'count counted' ); - is( $int, 3, 'integer set' ); - is( $string, 'foo', 'string set' ); - parseSuccess("-uiusi 3 foo 5", "Complex parsing managed 2"); - is( $count, 2, 'count counted' ); - is( $int, 5, 'integer set' ); - is( $string, 'foo', 'string set' ); - parseSuccess("-s -i foo -u 3", "Complex parsing managed 3"); - is( $count, 1, 'count counted' ); - is( $int, 3, 'integer set' ); - is( $string, 'foo', 'string set' ); -} - -sub testArguments { - &testOptionalArgument(); - &testRequiredArgument(); - &testRequiredArgumentAfterOptional(); -} - -sub testOptionalArgument { - &setUpParseTest(); - my $val; - setArgument(\$val, "Name", "Description"); - parseSuccess("", "Unset optional argument"); - ok( !defined $val, "Argument unset if not specified" ); - parseSuccess("myval", "Optional argument set"); - is( $val, 'myval', 'Optional argument set to correct value' ); -} - -sub testRequiredArgument { - &setUpParseTest(); - my $val; - setArgument(\$val, "Name", "Description", OPTION_REQUIRED); - parseFail("", "Argument Name is required but not specified\.\n"); - ok( !defined $val, "Argument unset on failure" ); - parseSuccess("myval", "Required argument set"); - is( $val, 'myval', 'Required argument set to correct value' ); -} - -sub testRequiredArgumentAfterOptional { - &setUpParseTest(); - my ($val, $val2); - setArgument(\$val, "Name", "Description"); - eval { - setArgument(\$val2, "Name2", "Description2", OPTION_REQUIRED); - }; - like( $@, qr/Cannot add required argument after optional/, - 'Fails adding required arg after optional' ); -} diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/Bin/GetClusterStateTest.pl b/vespaclient/src/perl/test/Yahoo/Vespa/Bin/GetClusterStateTest.pl deleted file mode 100644 index 6e2ec20c712..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/Bin/GetClusterStateTest.pl +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -use Test::More; -use strict; -use warnings; - -BEGIN { use_ok( 'Yahoo::Vespa::Bin::GetClusterState' ); } -require_ok( 'Yahoo::Vespa::Bin::GetClusterState' ); - -use TestUtils::VespaTest; -use Yahoo::Vespa::Mocks::ClusterControllerMock; -use Yahoo::Vespa::Mocks::VespaModelMock; - -# Set which application is called on assertRun / assertRunMatches calls -setApplication( \&getClusterState ); - -useColors(0); - -&testSimple(); -&testSyntaxPage(); -&testClusterDown(); - -done_testing(); - -exit(0); - -sub testSimple { - my $stdout = <<EOS; - -Cluster books: -books/storage/0: down -books/storage/1: up - -Cluster music: -music/distributor/0: down -music/distributor/1: up -music/storage/0: retired -EOS - assertRun("Default - no arguments", "", 0, $stdout, ""); -} - -sub testClusterDown { - Yahoo::Vespa::Mocks::ClusterControllerMock::setClusterDown(); - Yahoo::Vespa::ClusterController::init(); - Yahoo::Vespa::Bin::GetClusterState::init(); - my $stdout = <<EOS; - -Cluster books: -books/storage/0: down -books/storage/1: up - -Cluster music is down. Too few nodes available. -music/distributor/0: down -music/distributor/1: up -music/storage/0: retired -EOS - assertRun("Music cluster down", "", 0, $stdout, ""); -} - -sub testSyntaxPage { - my $stdout = <<EOS; -EOS - my $pat = qr/^Get the cluster state of a given cluster.*Usage:.*GetClusterState.*Options.*--help.*/s; - assertRunMatches("Syntax page", "--help", 1, $pat, qr/^$/); -} diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/Bin/GetNodeStateTest.pl b/vespaclient/src/perl/test/Yahoo/Vespa/Bin/GetNodeStateTest.pl deleted file mode 100644 index 626be8d37e7..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/Bin/GetNodeStateTest.pl +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -use Test::More; -use strict; -use warnings; - -BEGIN { use_ok( 'Yahoo::Vespa::Bin::GetNodeState' ); } -require_ok( 'Yahoo::Vespa::Bin::GetNodeState' ); - -use TestUtils::VespaTest; -use Yahoo::Vespa::Mocks::ClusterControllerMock; -use Yahoo::Vespa::Mocks::VespaModelMock; - -useColors(0); - -# Set which application is called on assertRun / assertRunMatches calls -setApplication( \&getNodeState ); - -&testSimple(); -&testSyntaxPage(); -&testRetired(); - -done_testing(); - -exit(0); - -sub testSimple { - my $stdout = <<EOS; -Shows the various states of one or more nodes in a Vespa Storage cluster. There -exist three different type of node states. They are: - - Unit state - The state of the node seen from the cluster controller. - User state - The state we want the node to be in. By default up. Can be - set by administrators or by cluster controller when it - detects nodes that are behaving badly. - Generated state - The state of a given node in the current cluster state. - This is the state all the other nodes know about. This - state is a product of the other two states and cluster - controller logic to keep the cluster stable. - -books/storage.0: -Unit: down: Not in slobrok -Generated: down: Not seen -User: down: default - -music/distributor.0: -Unit: up: Now reporting state U -Generated: down: Setting it down -User: down: Setting it down -EOS - assertRun("Default - no arguments", "", 0, $stdout, ""); -} - -sub testRetired { - setLocalHost("other.host.yahoo.com"); - my $stdout = <<EOS; - -music/storage.0: -Unit: up: Now reporting state U -Generated: retired: Stop using -User: retired: Stop using -EOS - assertRun("Other node", "-c music -t storage -i 0 -s", 0, $stdout, ""); -} - -sub testSyntaxPage { - my $stdout = <<EOS; -EOS - my $pat = qr/^Retrieve the state of one or more.*Usage:.*GetNodeState.*Options.*--help.*/s; - assertRunMatches("Syntax page", "--help", 1, $pat, qr/^$/); -} diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/Bin/SetNodeStateTest.pl b/vespaclient/src/perl/test/Yahoo/Vespa/Bin/SetNodeStateTest.pl deleted file mode 100644 index 7546c8f4ef6..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/Bin/SetNodeStateTest.pl +++ /dev/null @@ -1,133 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -use Test::More; -use strict; -use warnings; - -BEGIN { use_ok( 'Yahoo::Vespa::Bin::SetNodeState' ); } -require_ok( 'Yahoo::Vespa::Bin::SetNodeState' ); - -use TestUtils::VespaTest; -use Yahoo::Vespa::Mocks::ClusterControllerMock; -use Yahoo::Vespa::Mocks::VespaModelMock; - -# Set which application is called on assertRun / assertRunMatches calls -setApplication( \&setNodeState ); - -&testSimple(); -&testSyntaxPage(); -&testHelp(); -&testDownState(); -&testDownFailure(); -&testDefaultMaintenanceFails(); -&testForcedMaintenanceSucceeds(); - -done_testing(); - -exit(0); - -sub testSimple { - my $stdout = <<EOS; -Set user state for books/storage/0 to 'up' with reason '' -Set user state for music/distributor/0 to 'up' with reason '' -EOS - assertRun("Default - Min arguments", "up", 0, $stdout, ""); -} - -sub testSyntaxPage { - my $stdout = <<EOS; -EOS - my $pat = qr/^Set the user state of a node.*Usage:.*SetNodeState.*Arguments:.*Options:.*--help.*/s; - assertRunMatches("Syntax page", "--help", 1, $pat, qr/^$/); -} - -sub testHelp { - my $stdout = <<EOS; -Set the user state of a node. This will set the generated state to the user -state if the user state is "better" than the generated state that would have -been created if the user state was up. For instance, a node that is currently -in initializing state can be forced into down state, while a node that is -currently down can not be forced into retired state, but can be forced into -maintenance state. - -Usage: SetNodeStateTest.pl [Options] <Wanted State> [Description] - -Arguments: - Wanted State : User state to set. This must be one of up, down, maintenance or - retired. - Description : Give a reason for why you are altering the user state, which - will show up in various admin tools. (Use double quotes to give - a reason with whitespace in it) - -Options: - -h --help : Show this help page. - -v : Create more verbose output. - -s : Create less verbose output. - --show-hidden : Also show hidden undocumented debug options. - -Options related to operation visibility: - -n --no-wait : Do not wait for node state changes to be visible in - the cluster before returning. - -Node selection options. By default, nodes running locally will be selected: - -c --cluster : Cluster name. If unspecified, - and vespa is installed on current node, information - will be attempted auto-extracted - -f --force : Force execution - -t --type : Node type - can either be 'storage' or - 'distributor'. If not specified, the operation will - use state for both types. - -i --index : Node index. If not specified, - all nodes found running on this host will be used. - -Config retrieval options: - --config-server : Host name of config server to query - --config-server-port : Port to connect to config server on - --config-request-timeout : Timeout of config request -EOS - - assertRun("Help text", "-h", 1, $stdout, ""); -} - -sub testDownState { - my $stdout = <<EOS; -Set user state for books/storage/0 to 'down' with reason 'testing' -Set user state for music/distributor/0 to 'down' with reason 'testing' -EOS - assertRun("Down state", "down testing", 0, $stdout, ""); -} - -sub testDownFailure { - $Yahoo::Vespa::Mocks::ClusterControllerMock::forceInternalServerError = 1; - - my $stderr = <<EOS; -Failed to set node state for node books/storage/0: 500 Internal Server Error -(forced) -EOS - - assertRun("Down failure", "--nocolors down testing", 1, "", $stderr); - - $Yahoo::Vespa::Mocks::ClusterControllerMock::forceInternalServerError = 0; -} - -sub testDefaultMaintenanceFails { - my $stderr = <<EOS; -Setting the distributor to maintenance mode may have severe consequences for -feeding! -Please specify -t storage to only set the storage node to maintenance mode, or --f to override this error. -EOS - - assertRun("Default maintenance fails", "--nocolors maintenance testing", - 1, "", $stderr); -} - -sub testForcedMaintenanceSucceeds { - my $stdout = <<EOS; -Set user state for books/storage/0 to 'maintenance' with reason 'testing' -Set user state for music/distributor/0 to 'maintenance' with reason 'testing' -EOS - - assertRun("Forced maintenance succeeds", "-f maintenance testing", - 0, $stdout, ""); -} diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/ClusterControllerTest.pl b/vespaclient/src/perl/test/Yahoo/Vespa/ClusterControllerTest.pl deleted file mode 100644 index a833fad4087..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/ClusterControllerTest.pl +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -use Test::More; -use Data::Dumper; - -BEGIN { use_ok( 'Yahoo::Vespa::ClusterController' ); } -require_ok( 'Yahoo::Vespa::ClusterController' ); - -use TestUtils::OutputCapturer; -use Yahoo::Vespa::Mocks::ClusterControllerMock; -use Yahoo::Vespa::Mocks::VespaModelMock; - -Yahoo::Vespa::ConsoleOutput::setVerbosity(0); # Squelch output when running test -detectClusterController(); -Yahoo::Vespa::ConsoleOutput::setVerbosity(3); - -my $cclist = Yahoo::Vespa::ClusterController::getClusterControllers(); -is( scalar @$cclist, 1, "Cluster controllers detected" ); -is( $$cclist[0]->host, 'testhost.yahoo.com', 'Host autodetected' ); -is( $$cclist[0]->port, 19050, 'Port autodetected' ); - -is( join (' - ', Yahoo::Vespa::ClusterController::listContentClusters()), - "music - books", 'Content clusters' ); - -my $state = getContentClusterState('music'); - -$Data::Dumper::Indent = 1; -# print Dumper($state); - -is( $state->globalState, 'up', 'Generated state for music' ); - -is( $state->distributor->{'0'}->unit->state, 'up', 'Unit state for music' ); -is( $state->distributor->{'1'}->unit->state, 'up', 'Unit state for music' ); -is( $state->storage->{'0'}->unit->state, 'up', 'Unit state for music' ); -is( $state->storage->{'1'}->unit->state, 'up', 'Unit state for music' ); -is( $state->distributor->{'0'}->generated->state, 'down', 'Generated state' ); -is( $state->distributor->{'1'}->generated->state, 'up', 'Generated state' ); -is( $state->storage->{'0'}->generated->state, 'retired', 'Generated state' ); -is( $state->storage->{'1'}->generated->state, 'up', 'Generated state' ); -is( $state->distributor->{'0'}->user->state, 'down', 'User state' ); -is( $state->distributor->{'1'}->user->state, 'up', 'User state' ); -is( $state->storage->{'0'}->user->state, 'retired', 'User state' ); -is( $state->storage->{'1'}->user->state, 'up', 'User state' ); - -is( $state->storage->{'1'}->unit->reason, 'Now reporting state U', 'Reason' ); - -done_testing(); - -exit(0); diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/ConsoleOutputTest.pl b/vespaclient/src/perl/test/Yahoo/Vespa/ConsoleOutputTest.pl deleted file mode 100644 index 2089bf80d8e..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/ConsoleOutputTest.pl +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -use Test::More; - -BEGIN { use_ok( 'Yahoo::Vespa::ConsoleOutput' ); } -require_ok( 'Yahoo::Vespa::ConsoleOutput' ); - -ok( Yahoo::Vespa::ConsoleOutput::getVerbosity() == 3, - 'Default verbosity is 3' ); -ok( Yahoo::Vespa::ConsoleOutput::usingAnsiColors(), - 'Using ansi colors by default' ); - -use TestUtils::VespaTest; - -printSpam "test\n"; -isOutput('', '', "No spam at level 3"); - -printDebug "test\n"; -isOutput('', '', "No spam at level 3"); - -printInfo "info test\n"; -isOutput("info test\n", '', "Info at level 3"); - -printWarning "foo\n"; -isOutput("", "\e[93mfoo\e[0m\n", "Stderr output for warning"); - -useColors(0); -printWarning "foo\n"; -isOutput("", "foo\n", "Stderr output without ansi colors"); - -Yahoo::Vespa::ConsoleOutput::setVerbosity(4); -printSpam "test\n"; -isOutput('', '', "No spam at level 4"); - -printDebug "test\n"; -isOutput("debug: test\n", '', "Debug at level 4"); - -Yahoo::Vespa::ConsoleOutput::setVerbosity(5); -printSpam "test\n"; -isOutput("spam: test\n", '', "Spam at level 5"); - -printInfo "info test\n"; -isOutput("info: info test\n", '', "Type prefix at high verbosity"); - -done_testing(); - -exit(0); diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/HttpTest.pl b/vespaclient/src/perl/test/Yahoo/Vespa/HttpTest.pl deleted file mode 100644 index 1e3e97bb829..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/HttpTest.pl +++ /dev/null @@ -1,140 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# -# Tests of the Http wrapper library.. -# -# NOTE: Test server set up does not support content not ending in newline. -# - -use strict; -use Test::More; -use Yahoo::Vespa::Mocks::HttpServerMock; - -BEGIN { - use_ok( 'Yahoo::Vespa::Http' ); - *Http:: = *Yahoo::Vespa::Http:: -} -require_ok( 'Yahoo::Vespa::Http' ); - -my $httpTestServerPort = setupTestHttpServer(); -ok(defined $httpTestServerPort, "Test server set up"); - -&testSimpleGet(); -&testAdvancedGet(); -&testFailingGet(); -&testSimplePost(); -&testJsonReturnInPost(); - -done_testing(); - -exit(0); - -sub filterRequest { - my ($request) = @_; - $request =~ s/\r//g; - $request =~ s/(Content-Length:\s*)\d+/$1##/g; - $request =~ s/(Host: localhost:)\d+/$1##/g; - $request =~ s/(?:Connection|TE|Client-[^:]+):[^\n]*\n//g; - - return $request; -} - -sub testSimpleGet { - my %r = Http::get('localhost', $httpTestServerPort, '/foo'); - is( $r{'code'}, 200, "Get request code" ); - is( $r{'status'}, 'OK', "Get request status" ); - - my $expected = <<EOS; -HTTP/1.1 200 OK -Content-Length: ## -Content-Type: text/plain; charset=utf-8 - -GET /foo HTTP/1.1 -Host: localhost:## -User-Agent: Vespa-perl-script -EOS - is( &filterRequest($r{'all'}), $expected, 'Get result' ); -} - -sub testAdvancedGet { - my @headers = ("X-Foo" => 'Bar'); - my @uri_param = ("uricrap" => 'special=?&%value', - "other" => 'hmm'); - my %r = Http::request('GET', 'localhost', $httpTestServerPort, '/foo', - \@uri_param, undef, \@headers); - is( $r{'code'}, 200, "Get request code" ); - is( $r{'status'}, 'OK', "Get request status" ); - - my $expected = <<EOS; -HTTP/1.1 200 OK -Content-Length: ## -Content-Type: text/plain; charset=utf-8 - -GET /foo?uricrap=special%3D%3F%26%25value&other=hmm HTTP/1.1 -Host: localhost:## -User-Agent: Vespa-perl-script -X-Foo: Bar -EOS - is( &filterRequest($r{'all'}), $expected, 'Get result' ); -} - -sub testFailingGet { - my @uri_param = ("code" => '501', - "status" => 'Works'); - my %r = Http::request('GET', 'localhost', $httpTestServerPort, '/foo', - \@uri_param); - is( $r{'code'}, 501, "Get request code" ); - is( $r{'status'}, 'Works', "Get request status" ); - - my $expected = <<EOS; -HTTP/1.1 501 Works -Content-Length: ## -Content-Type: text/plain; charset=utf-8 - -GET /foo?code=501&status=Works HTTP/1.1 -Host: localhost:## -User-Agent: Vespa-perl-script -EOS - is( &filterRequest($r{'all'}), $expected, 'Get result' ); -} - -sub testSimplePost { - my @uri_param = ("uricrap" => 'Rrr' ); - my %r = Http::request('POST', 'localhost', $httpTestServerPort, '/foo', - \@uri_param, "Some content\n"); - is( $r{'code'}, 200, "Get request code" ); - is( $r{'status'}, 'OK', "Get request status" ); - - my $expected = <<EOS; -HTTP/1.1 200 OK -Content-Length: ## -Content-Type: text/plain; charset=utf-8 - -POST /foo?uricrap=Rrr HTTP/1.1 -Host: localhost:## -User-Agent: Vespa-perl-script -Content-Length: ## -Content-Type: application/x-www-form-urlencoded - -Some content -EOS - is( &filterRequest($r{'all'}), $expected, 'Get result' ); -} - -sub testJsonReturnInPost -{ - my @uri_param = ("contenttype" => 'application/json' ); - my $json = "{ \"key\" : \"value\" }\n"; - my %r = Http::request('POST', 'localhost', $httpTestServerPort, '/foo', - \@uri_param, $json); - is( $r{'code'}, 200, "Get request code" ); - is( $r{'status'}, 'OK', "Get request status" ); - - my $expected = <<EOS; -HTTP/1.1 200 OK -Content-Length: ## -Content-Type: application/json - -{ "key" : "value" } -EOS - is( &filterRequest($r{'all'}), $expected, 'Get json result' ); -} diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/JsonTest.pl b/vespaclient/src/perl/test/Yahoo/Vespa/JsonTest.pl deleted file mode 100644 index b0eb7962b33..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/JsonTest.pl +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# -# Tests of the Json wrapper library.. -# - -use Test::More; - -use strict; - -BEGIN { - use_ok( 'Yahoo::Vespa::Json' ); - *Json:: = *Yahoo::Vespa::Json:: # Alias namespace -} -require_ok( 'Yahoo::Vespa::Json' ); - -&testSimpleJson(); - -done_testing(); - -exit(0); - -sub testSimpleJson { - my $json = <<EOS; -{ - "foo" : "bar", - "map" : { - "abc" : "def", - "num" : 13.0 - }, - "array" : [ - { "val1" : 3 }, - { "val2" : 6 } - ] -} -EOS - my $parsed = Json::parse($json); - is( $parsed->{'foo'}, 'bar', 'json test 1' ); - is( $parsed->{'map'}->{'abc'}, 'def', 'json test 2' ); - is( $parsed->{'map'}->{'num'}, 13.0, 'json test 3' ); - my $prettyPrint = <<EOS; -{ - "array" : [ - { - "val1" : 3 - }, - { - "val2" : 6 - } - ], - "map" : { - "num" : 13, - "abc" : "def" - }, - "foo" : "bar" -} -EOS - is( Json::encode($parsed), $prettyPrint, 'simple json test - encode' ); - my @keys = sort keys %{$parsed->{'map'}}; - is( scalar @keys, 2, 'simple json test - map keys' ); - is( $keys[0], 'abc', 'simple json test - map key 1' ); - is( $keys[1], 'num', 'simple json test - map key 2' ); - - @keys = @{ $parsed->{'array'} }; - is( scalar @keys, 2, 'simple json test - list keys' ); - is( $keys[0]->{'val1'}, 3, 'simple json test - list key 1' ); - is( $keys[1]->{'val2'}, 6, 'simple json test - list key 2' ); -} diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/ClusterControllerMock.pm b/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/ClusterControllerMock.pm deleted file mode 100644 index cb642dbc629..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/ClusterControllerMock.pm +++ /dev/null @@ -1,258 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package Yahoo::Vespa::Mocks::ClusterControllerMock; - -use strict; -use warnings; -use URI::Escape; -use Yahoo::Vespa::ConsoleOutput; -use Yahoo::Vespa::Mocks::HttpClientMock; -use Yahoo::Vespa::Utils; - -BEGIN { - use base 'Exporter'; - our @EXPORT = qw( - ); -} - -our $forceInternalServerError = 0; - -# Register a handler in the Http Client mock -registerHttpClientHandler(\&handleCCRequest); - -our $clusterListJson = <<EOS; -{ - "cluster" : { - "books" : { - "link" : "/cluster/v2/books" - }, - "music" : { - "link" : "/cluster/v2/music" - } - } -} -EOS -our $musicClusterJson = <<EOS; -{ - "state" : { - "generated" : { - "state" : "up", - "reason" : "" - } - }, - "service" : { - "distributor" : { - "node" : { - "0" : { - "attributes" : { "hierarchical-group" : "top" }, - "state" : { - "generated" : { "state" : "down", "reason" : "Setting it down" }, - "unit" : { "state" : "up", "reason" : "Now reporting state U" }, - "user" : { "state" : "down", "reason" : "Setting it down" } - } - }, - "1" : { - "attributes" : { "hierarchical-group" : "top" }, - "state" : { - "generated" : { "state" : "up", "reason" : "Setting it up" }, - "unit" : { "state" : "up", "reason" : "Now reporting state U" }, - "user" : { "state" : "up", "reason" : "" - } - } - } - } - }, - "storage" : { - "node" : { - "0" : { - "attributes" : { "hierarchical-group" : "top" }, - "state" : { - "generated" : { "state" : "retired", "reason" : "Stop using" }, - "unit" : { "state" : "up", "reason" : "Now reporting state U" }, - "user" : { "state" : "retired", "reason" : "Stop using" } - }, - "partition" : { - "0" : { - "metrics" : { - "bucket-count" : 5, - "unique-document-count" : 10, - "unique-document-total-size" : 1000 - } - } - } - }, - "1" : { - "attributes" : { "hierarchical-group" : "top" }, - "state" : { - "generated" : { "state" : "up", "reason" : "Setting it up" }, - "unit" : { "state" : "up", "reason" : "Now reporting state U" }, - "user" : { "state" : "up", "reason" : "" - } - }, - "partition" : { - "0" : { - "metrics" : { - "bucket-count" : 50, - "unique-document-count" : 100, - "unique-document-total-size" : 10000 - } - } - } - } - } - } - } -} -EOS -our $booksClusterJson = <<EOS; -{ - "state" : { - "generated" : { - "state" : "up", - "reason" : "" - } - }, - "service" : { - "distributor" : { - "node" : { - "0" : { - "attributes" : { "hierarchical-group" : "top.g1" }, - "state" : { - "generated" : { "state" : "down", "reason" : "Setting it down" }, - "unit" : { "state" : "up", "reason" : "Now reporting state U" }, - "user" : { "state" : "down", "reason" : "Setting it down" } - } - }, - "1" : { - "attributes" : { "hierarchical-group" : "top.g2" }, - "state" : { - "generated" : { "state" : "up", "reason" : "Setting it up" }, - "unit" : { "state" : "up", "reason" : "Now reporting state U" }, - "user" : { "state" : "up", "reason" : "" - } - } - } - } - }, - "storage" : { - "node" : { - "0" : { - "attributes" : { "hierarchical-group" : "top.g1" }, - "state" : { - "generated" : { "state" : "down", "reason" : "Not seen" }, - "unit" : { "state" : "down", "reason" : "Not in slobrok" }, - "user" : { "state" : "down", "reason" : "default" } - } - }, - "1" : { - "attributes" : { "hierarchical-group" : "top.g2" }, - "state" : { - "generated" : { "state" : "up", "reason" : "Setting it up" }, - "unit" : { "state" : "up", "reason" : "Now reporting state U" }, - "user" : { "state" : "up", "reason" : "" - } - } - } - } - } - } -} -EOS - -return &init(); - -sub init { - #print "Verifying that cluster list json is parsable.\n"; - my $json = Json::parse($clusterListJson); - #print "Verifying that music json is parsable\n"; - $json = Json::parse($musicClusterJson); - #print "Verifying that books json is parsable\n"; - $json = Json::parse($booksClusterJson); - #print "All seems parsable.\n"; - return 1; -} - -sub setClusterDown { - $musicClusterJson =~ s/"up"/"down"/; - $musicClusterJson =~ s/""/"Not enough nodes up"/; - #print "Cluster state: $musicClusterJson\n"; - #print "Verifying that music json is parsable\n"; - my $json = Json::parse($musicClusterJson); -} - -sub handleCCRequest { # (Type, Host, Port, Path, ParameterMap, Content, Headers) - my ($type, $host, $port, $path, $params, $content, $headers) = @_; - my %paramHash; - if (defined $params) { - %paramHash = @$params; - } - if ($forceInternalServerError) { - printDebug "Forcing internal server error response\n"; - return ( - 'code' => 500, - 'status' => 'Internal Server Error (forced)' - ); - } - if ($path eq "/cluster/v2/") { - printDebug "Handling cluster list request\n"; - return ( - 'code' => 200, - 'status' => 'OK', - 'content' => $clusterListJson - ); - } - if ($path eq "/cluster/v2/music/" - && (exists $paramHash{'recursive'} - && $paramHash{'recursive'} eq 'true')) - { - printDebug "Handling cluster music state request\n"; - return ( - 'code' => 200, - 'status' => 'OK', - 'content' => $musicClusterJson - ); - } - if ($path eq "/cluster/v2/books/" - && (exists $paramHash{'recursive'} - && $paramHash{'recursive'} eq 'true')) - { - printDebug "Handling cluster books state request\n"; - return ( - 'code' => 200, - 'status' => 'OK', - 'content' => $booksClusterJson - ); - } - if ($path =~ /^\/cluster\/v2\/(books|music)\/(storage|distributor)\/(\d+)$/) - { - my ($cluster, $service, $index) = ($1, $2, $3); - my $json = Json::parse($content); - my $state = $json->{'state'}->{'user'}->{'state'}; - my $description = $json->{'state'}->{'user'}->{'reason'}; - if (!defined $description && $state eq 'up') { - $description = ""; - } - if ($state !~ /^(?:up|down|maintenance|retired)$/) { - return ( - 'code' => 500, - 'status' => "Unknown state '$state' specified" - ); - } - if (!defined $state || !defined $description) { - return ( - 'code' => 500, - 'status' => "Invalid form data or failed parsing: '$content'" - ); - } - printDebug "Handling set user state request $cluster/$service/$index"; - return ( - 'code' => 200, - 'status' => "Set user state for $cluster/$service/$index to " - . "'$state' with reason '$description'" - ); - } - printDebug "Request to '$path' not matched. Params:\n"; - foreach my $key (keys %paramHash) { - printDebug " $key => '$paramHash{$key}'\n"; - } - return; -} diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/HttpClientMock.pm b/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/HttpClientMock.pm deleted file mode 100644 index 2840da9899a..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/HttpClientMock.pm +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# -# Switched the backend implementation of the Vespa::Http library, such that -# requests are sent here rather than onto the network. Register handlers here -# to respond to requests. -# -# Handlers are called in sequence until one of them returns a defined result. -# If none do, return a generic failure. -# - -package Yahoo::Vespa::Mocks::HttpClientMock; - -use strict; -use warnings; -use Yahoo::Vespa::ConsoleOutput; -use Yahoo::Vespa::Http; - -BEGIN { # - Define default exports for module - use base 'Exporter'; - our @EXPORT = qw( - registerHttpClientHandler - ); -} - -my @HANDLERS; - -&initialize(); - -return 1; - -#################### Default exported functions ############################# - -sub registerHttpClientHandler { # (Handler) - push @HANDLERS, $_[0]; -} - -##################### Internal utility functions ########################## - -sub initialize { # () - Yahoo::Vespa::Http::setHttpExecutor(\&clientMock); -} -sub clientMock { # (HttpRequest to forward) -> Response - foreach my $handler (@HANDLERS) { - my %result = &$handler(@_); - if (exists $result{'code'}) { - return %result; - } - } - return ( - 'code' => 500, - 'status' => 'No client handler for given request', - 'content' => '', - 'all' => '' - ); -} diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/HttpServerMock.pm b/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/HttpServerMock.pm deleted file mode 100644 index 00a6f1526b2..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/HttpServerMock.pm +++ /dev/null @@ -1,156 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# -# A mock of an HTTP server, such that HTTP client library can be tested. -# -# Known limitations: -# - Does line by line reading of TCP data, so the content part of the HTML -# request has to end in a newline, otherwise, the server will block waiting -# for more data. -# -# Default connection handler: -# - If no special case, server returns request 200 OK, with the complete -# client request as text/plain utf8 content. -# - If request matches contenttype=\S+ (Typically due to setting a URI -# parameter), the response will contain the content of the request with the -# given content type set. -# - If request matches code=\d+ (Typically due to setting a URI parameter), -# the response will use that return code. -# - If request matches status=\S+ (Typically due to setting a URI parameter), -# the response will use that status line -# - -package Yahoo::Vespa::Mocks::HttpServerMock; - -use strict; -use warnings; -use IO::Socket::IP; -use URI::Escape; - -BEGIN { # - Set up exports for module - use base 'Exporter'; - our @EXPORT = qw( - setupTestHttpServer - ); -} - -my $HTTP_TEST_SERVER; -my $HTTP_TEST_SERVER_PORT; -my $HTTP_TEST_SERVER_PID; -my $CONNECTION_HANDLER = \&defaultConnectionHandler; - -END { # - Kill forked HTTP handler process on exit - if (defined $HTTP_TEST_SERVER_PID) { - kill(9, $HTTP_TEST_SERVER_PID); - } -} - -return 1; - -####################### Default exported functions ############################ - -sub setupTestHttpServer { # () -> HttpServerPort - my $portfile = "/tmp/vespaclient.$$.perl.httptestserverport"; - unlink($portfile); - my $pid = fork(); - if ($pid == 0) { - $HTTP_TEST_SERVER = IO::Socket::IP->new( - 'Proto' => 'tcp', - 'LocalPort' => 0, - 'Listen' => SOMAXCONN, - 'ReuseAddr' => 1, - ); - # print "Started server listening to port " . $HTTP_TEST_SERVER->sockport() - # . "\n"; - my $fh; - open ($fh, ">$portfile") or die "Failed to write port used to file."; - print $fh "<" . $HTTP_TEST_SERVER->sockport() . ">"; - close $fh; - defined $HTTP_TEST_SERVER or die "Failed to set up test HTTP server"; - while (1) { - &$CONNECTION_HANDLER(); - } - exit(0); - } else { - $HTTP_TEST_SERVER_PID = $pid; - while (1) { - if (-e $portfile) { - my $port = `cat $portfile`; - chomp $port; - if (defined $port && $port =~ /\<(\d+)\>/) { - #print "Client using port $1\n"; - $HTTP_TEST_SERVER_PORT = $1; - last; - } - } - sleep(0.01); - } - } - unlink($portfile); - return $HTTP_TEST_SERVER_PORT; -} - -####################### Internal utility functions ############################ - -sub defaultConnectionHandler { - my $client = $HTTP_TEST_SERVER->accept(); - defined $client or die "No connection to accept?"; - my $request; - my $line; - my $content_length = 0; - my $content_type; - while ($line = <$client>) { - if ($line =~ /^(.*?)\s$/) { - $line = $1; - } - if ($line =~ /Content-Length:\s(\d+)/) { - $content_length = $1; - } - if ($line =~ /contenttype=(\S+)/) { - $content_type = uri_unescape($1); - } - #print "Got line '$line'\n"; - if ($line eq '') { - last; - } - $request .= $line . "\n"; - } - if ($content_length > 0) { - $request .= "\n"; - if (defined $content_type) { - $request = ""; - } - my $read = 0; - while ($line = <$client>) { - $read += length $line; - if ($line =~ /^(.*?)\s$/) { - $line = $1; - } - $request .= $line; - if ($read >= $content_length) { - last; - } - } - } - # print "Got request '$request'.\n"; - $request =~ s/\n/\r\n/g; - my $code = 200; - my $status = "OK"; - if ($request =~ /code=(\d+)/) { - $code = $1; - } - if ($request =~ /status=([A-Za-z0-9]+)/) { - $status = $1; - } - my $response = "HTTP/1.1 $code $status\n"; - if (defined $content_type) { - $response .= "Content-Type: $content_type\n"; - } else { - $response .= "Content-Type: text/plain; charset=utf-8\n"; - } - $response .= "Content-Length: " . (length $request) . "\n" - . "\n"; - $response =~ s/\n/\r\n/g; - $response .= $request; - print $client $response; - close $client; -} diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/VespaModelMock.pm b/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/VespaModelMock.pm deleted file mode 100644 index 63ff9f767d1..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/Mocks/VespaModelMock.pm +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -package Yahoo::Vespa::Mocks::VespaModelMock; - -use strict; -use warnings; -use Yahoo::Vespa::VespaModel; - -Yahoo::Vespa::VespaModel::setModelRetrievalFunction(\&getModelConfig); - -our $defaultModelConfig = <<EOS; -hosts[0].name "testhost.yahoo.com" -hosts[0].services[0].name "container-clustercontroller" -hosts[0].services[0].type "container-clustercontroller" -hosts[0].services[0].configid "admin/cluster-controllers/0" -hosts[0].services[0].clustertype "" -hosts[0].services[0].clustername "cluster-controllers" -hosts[0].services[0].index 0 -hosts[0].services[0].ports[0].number 19050 -hosts[0].services[0].ports[0].tags "state external query http" -hosts[0].services[0].ports[1].number 19100 -hosts[0].services[0].ports[1].tags "external http" -hosts[0].services[0].ports[2].number 19101 -hosts[0].services[0].ports[2].tags "messaging rpc" -hosts[0].services[0].ports[3].number 19102 -hosts[0].services[0].ports[3].tags "admin rpc" -hosts[0].services[1].name "distributor2" -hosts[0].services[1].type "distributor" -hosts[0].services[1].configid "music/distributor/0" -hosts[0].services[1].clustertype "content" -hosts[0].services[1].clustername "music" -hosts[0].services[1].index 0 -hosts[0].services[1].ports[0].number 19131 -hosts[0].services[1].ports[0].tags "messaging" -hosts[0].services[1].ports[1].number 19132 -hosts[0].services[1].ports[1].tags "status rpc" -hosts[0].services[1].ports[2].number 19133 -hosts[0].services[1].ports[2].tags "status http" -hosts[0].services[2].name "storagenode3" -hosts[0].services[2].type "storagenode" -hosts[0].services[2].configid "storage/storage/0" -hosts[0].services[2].clustertype "content" -hosts[0].services[2].clustername "books" -hosts[0].services[2].index 0 -hosts[0].services[2].ports[0].number 19134 -hosts[0].services[2].ports[0].tags "messaging" -hosts[0].services[2].ports[1].number 19135 -hosts[0].services[2].ports[1].tags "status rpc" -hosts[0].services[2].ports[2].number 19136 -hosts[0].services[2].ports[2].tags "status http" -hosts[1].name "other.host.yahoo.com" -hosts[1].services[0].name "distributor2" -hosts[1].services[0].type "distributor" -hosts[1].services[0].configid "music/distributor/1" -hosts[1].services[0].clustertype "content" -hosts[1].services[0].clustername "music" -hosts[1].services[0].index 1 -hosts[1].services[0].ports[0].number 19131 -hosts[1].services[0].ports[0].tags "messaging" -hosts[1].services[0].ports[1].number 19132 -hosts[1].services[0].ports[1].tags "status rpc" -hosts[1].services[0].ports[2].number 19133 -hosts[1].services[0].ports[2].tags "status http" -hosts[1].services[1].name "storagenode3" -hosts[1].services[1].type "storagenode" -hosts[1].services[1].configid "storage/storage/1" -hosts[1].services[1].clustertype "content" -hosts[1].services[1].clustername "books" -hosts[1].services[1].index 1 -hosts[1].services[1].ports[0].number 19134 -hosts[1].services[1].ports[0].tags "messaging" -hosts[1].services[1].ports[1].number 19135 -hosts[1].services[1].ports[1].tags "status rpc" -hosts[1].services[1].ports[2].number 19136 -hosts[1].services[1].ports[2].tags "status http" -hosts[1].services[2].name "storagenode2" -hosts[1].services[2].type "storagenode" -hosts[1].services[2].configid "storage/storage/0" -hosts[1].services[2].clustertype "content" -hosts[1].services[2].clustername "music" -hosts[1].services[2].index 0 -hosts[1].services[2].ports[0].number 19134 -hosts[1].services[2].ports[0].tags "messaging" -hosts[1].services[2].ports[1].number 19135 -hosts[1].services[2].ports[1].tags "status rpc" -hosts[1].services[2].ports[2].number 19136 -hosts[1].services[2].ports[2].tags "status http" - -EOS - -sub getModelConfig { - my @output = split(/\n/, $defaultModelConfig); - return @output; -} - -1; diff --git a/vespaclient/src/perl/test/Yahoo/Vespa/VespaModelTest.pl b/vespaclient/src/perl/test/Yahoo/Vespa/VespaModelTest.pl deleted file mode 100644 index d1c1a1bb0d9..00000000000 --- a/vespaclient/src/perl/test/Yahoo/Vespa/VespaModelTest.pl +++ /dev/null @@ -1,63 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -use Test::More; -use Yahoo::Vespa::Mocks::VespaModelMock; - -BEGIN { - use_ok( 'Yahoo::Vespa::VespaModel' ); - *VespaModel:: = *Yahoo::Vespa::VespaModel:: ; -} -require_ok( 'Yahoo::Vespa::VespaModel' ); - -&testGetSocketForService(); -&testVisitServices(); - -done_testing(); - -exit(0); - -sub testGetSocketForService { - my $sockets = VespaModel::getSocketForService( - type => 'container-clustercontroller', tag => 'state'); - my ($host, $port) = ($$sockets[0]->{'host'}, $$sockets[0]->{'port'}); - is( $host, 'testhost.yahoo.com', "Host for state API" ); - is( $port, 19050, 'Port for state API' ); - $sockets = VespaModel::getSocketForService( - type => 'container-clustercontroller', tag => 'admin'); - ($host, $port) = ($$sockets[0]->{'host'}, $$sockets[0]->{'port'}); - is( $host, 'testhost.yahoo.com', "Host for state API" ); - is( $port, 19102, 'Port for state API' ); - $sockets = VespaModel::getSocketForService( - type => 'container-clustercontroller', tag => 'http'); - ($host, $port) = ($$sockets[0]->{'host'}, $$sockets[0]->{'port'}); - is( $port, 19100, 'Port for state API' ); - - $sockets = VespaModel::getSocketForService( - type => 'distributor', index => 0); - ($host, $port) = ($$sockets[0]->{'host'}, $$sockets[0]->{'port'}); - is( $host, 'testhost.yahoo.com', 'host for distributor 0' ); -} - -my @services; - -sub serviceCallback { - my ($info) = @_; - push @services, "Name($$info{'name'}) Type($$info{'type'}) " - . "Cluster($$info{'cluster'}) Host($$info{'host'}) " - . "Index($$info{'index'})"; -} - -sub testVisitServices { - @services = (); - VespaModel::visitServices(\&serviceCallback); - my $expected = <<EOS; -Name(storagenode3) Type(storagenode) Cluster(books) Host(testhost.yahoo.com) Index(0) -Name(storagenode3) Type(storagenode) Cluster(books) Host(other.host.yahoo.com) Index(1) -Name(container-clustercontroller) Type(container-clustercontroller) Cluster(cluster-controllers) Host(testhost.yahoo.com) Index(0) -Name(distributor2) Type(distributor) Cluster(music) Host(testhost.yahoo.com) Index(0) -Name(distributor2) Type(distributor) Cluster(music) Host(other.host.yahoo.com) Index(1) -Name(storagenode2) Type(storagenode) Cluster(music) Host(other.host.yahoo.com) Index(0) -EOS - chomp $expected; - is ( join("\n", @services), $expected, "Services visited correctly" ); -} |