| 485 | = Auto-approval = |
| 486 | |
| 487 | This section contains multiple tests, and includes a "General setup" subsection to set some variables, and then additional subsections to do various tests. |
| 488 | |
| 489 | Each of the subsections corresponds to one of the approve-on-creation modes; you should run the tests in the section that corresponds to the approve-on-creation mode of the FOAM server that you're testing. (The "General setup" subsection includes a step for determining this, each subsection includes a step to double-check it.) |
| 490 | |
| 491 | You only need to do the "General setup" subsection once. |
| 492 | |
| 493 | Pre-requisites/assumptions: |
| 494 | |
| 495 | * You're set up to use Omni in general, and have it in your path as 'omni', i.e. you've successfully used Omni to reserve GENI resources (and have the latest version of the software, a user credential signed by a CA that's trusted by the FOAM server you intend to test, a working omni_config file, etc). |
| 496 | * You have a set of valid request rspec files to test with. We plan to make some sample rspecs available. |
| 497 | * You can log in non-interactively to the FOAM and FV servers, and have admin privs there, and have the FOAM and fvadmin password stored in files (/opt/foam/etc/passwd and /etc/flowvisor/fvpasswd). (This generally can't be used as-is to test FOAM at other sites.) |
| 498 | * The URL of the FOAM server is also a name that you can use to log in to it. (Very likely, but might be untrue with virtualhosts or some other odd thing.) |
| 499 | * On the FOAM server you're testing, you have the foam-confirm-sliver, flowvisor-confirm-fvslice-exists, and flowvisor-confirm-flowspace-rule-count scripts. |
| 500 | * On the system where you're running commands, you have the foam-create-and-verify-sliver script. |
| 501 | |
| 502 | Note that the scripts mentioned in the last two items are currently GPO-only. (GPO folks, they're in the syseng repo, under gposw.) |
| 503 | |
| 504 | You can run these tests wherever you usually use Omni; as written, they use SSH to run remote commands on the FOAM/FV server. |
| 505 | |
| 506 | == General setup == |
| 507 | |
| 508 | Set the FOAM server name (modify this to use the DNS name of the server that you want to test): |
| 509 | |
| 510 | {{{ |
| 511 | foamserver=foam.example.edu |
| 512 | }}} |
| 513 | |
| 514 | Set the name of the FlowVisor server to be the same (if it's the same, or something else if it isn't): |
| 515 | |
| 516 | {{{ |
| 517 | fvserver=$foamserver |
| 518 | }}} |
| 519 | |
| 520 | Set the AM API URL: |
| 521 | |
| 522 | {{{ |
| 523 | am=https://${foamserver}:3626/foam/gapi/1 |
| 524 | }}} |
| 525 | |
| 526 | Identify the rspecs you plan to use (modify this if you want to use different rspecs), in several categories: |
| 527 | |
| 528 | * Four that specify subnets: The first two don't overlap, the third overlaps with one of the first two, the fourth overlaps with all of the first three. |
| 529 | * Four that specify MAC addresses: The first two don't overlap, the third overlaps with one of the first two, the fourth overlaps with all of the first three. |
| 530 | * Four that specify ethertypes: The first two don't overlap, the third overlaps with one of the first two, the fourth overlaps with all of the first three. |
| 531 | * One that specifies a subnet, a MAC address, and an ethertype, each of which overlaps with one of the rspecs in the corresponding one of the three groups above. |
| 532 | * One that includes a more complex flowspace: A subnet that doesn't overlap with anything else, but also an entire VLAN (which should not be auto-approved). |
| 533 | * One that includes two ports that are in a you-can-only-have-one-of-these port group. (FIXME: What does FOAM actually call this? And for that matter, how do you set it?) |
| 534 | |
| 535 | {{{ |
| 536 | rspec_10_3_5_0_24=~/rspecs/request/misc/openflow-any-10-3-5-0-24.rspec |
| 537 | rspec_10_7_9_0_24=~/rspecs/request/misc/openflow-any-10-7-9-0-24.rspec |
| 538 | rspec_10_3_0_0_16=~/rspecs/request/misc/openflow-any-10-3-0-0-16.rspec |
| 539 | rspec_10_0_0_0_12=~/rspecs/request/misc/openflow-any-10-0-0-0-12.rspec |
| 540 | |
| 541 | rspec_cafebeefface=~/rspecs/request/misc/openflow-any-cafebeefface.rspec |
| 542 | rspec_deadbeadfeed=~/rspecs/request/misc/openflow-any-deadbeadfeed.rspec |
| 543 | rspec_aced_and_cafe=~/rspecs/request/misc/openflow-any-aced-and-cafe.rspec |
| 544 | rspec_aced_and_cafe_and_dead=~/rspecs/request/misc/openflow-any-aced-and-cafe-and-dead.rspec |
| 545 | |
| 546 | rspec_ethertype_3171=~/rspecs/request/misc/openflow-any-ethertype-3171.rspec |
| 547 | rspec_ethertype_3172=~/rspecs/request/misc/openflow-any-ethertype-3172.rspec |
| 548 | rspec_ethertype_3173_and_3171=~/rspecs/request/misc/openflow-any-ethertype-3173-and-3171.rspec |
| 549 | rspec_ethertype_3173_and_3172_and_3171=~/rspecs/request/misc/openflow-any-ethertype-3173-and-3172-and-3171.rspec |
| 550 | |
| 551 | rspec_one_of_each=~/rspecs/request/misc/openflow-any-one-each-subnet-mac-ethertype.rspec |
| 552 | |
| 553 | rspec_subnet_and_vlan=~/rspecs/request/misc/openflow-any-subnet-and-vlan.rspec |
| 554 | }}} |
| 555 | |
| 556 | Set four slicenames, using something with your username and "foamtest": |
| 557 | |
| 558 | {{{ |
| 559 | slicename1=${USER}foamtest1 |
| 560 | slicename2=${USER}foamtest2 |
| 561 | slicename3=${USER}foamtest3 |
| 562 | slicename4=${USER}foamtest4 |
| 563 | }}} |
| 564 | |
| 565 | Make sure FOAM is listening at all: |
| 566 | |
| 567 | {{{ |
| 568 | omni -a $am getversion |
| 569 | omni -a $am listresources |
| 570 | }}} |
| 571 | |
| 572 | Check which approve-on-creation mode FOAM is currently set to use: |
| 573 | |
| 574 | {{{ |
| 575 | ssh $foamserver foamctl config:get-value --key="geni.approval.approve-on-creation" --passwd-file=/opt/foam/etc/foampasswd |
| 576 | }}} |
| 577 | |
| 578 | The possible values are 2 for "analysis", 1 for "always", and 0 for "never". (You can change this if you want to test a different value, but you may not want to do that, e.g. if it's a server that anyone else is using.) |
| 579 | |
| 580 | OPTIONALLY, turn off e-mail notification for creation, approval, and deletion: |
| 581 | |
| 582 | {{{ |
| 583 | ssh $foamserver foamctl config:set-value --key="email.event.createsliver.admin" --value="false" --passwd-file=/opt/foam/etc/foampasswd |
| 584 | ssh $foamserver foamctl config:set-value --key="email.event.approvesliver.admin" --value="false" --passwd-file=/opt/foam/etc/foampasswd |
| 585 | ssh $foamserver foamctl config:set-value --key="email.event.gapi-deletesliver.admin" --value="false" --passwd-file=/opt/foam/etc/foampasswd |
| 586 | }}} |
| 587 | |
| 588 | If you do that, you may want to turn notification back on when you're done testing: |
| 589 | |
| 590 | {{{ |
| 591 | ssh $foamserver foamctl config:set-value --key="email.event.createsliver.admin" --value="true" --passwd-file=/opt/foam/etc/foampasswd |
| 592 | ssh $foamserver foamctl config:set-value --key="email.event.approvesliver.admin" --value="true" --passwd-file=/opt/foam/etc/foampasswd |
| 593 | ssh $foamserver foamctl config:set-value --key="email.event.gapi-deletesliver.admin" --value="true" --passwd-file=/opt/foam/etc/foampasswd |
| 594 | }}} |
| 595 | |
| 596 | Now you're ready to run the tests in one or more of the following subections. |
| 597 | |
| 598 | == Approval mode 2 ("analysis") == |
| 599 | |
| 600 | This subsection tests the behavior of FOAM when new slivers are created and geni.approval.approve-on-creation is set to 2 (analysis). The expected behavior is that slivers will be automatically approved if they pass all of the checks in the analysis engine, i.e. they don't overlap with any existing slivers; and don't contain any flowspace that can't be handled by the analysis engine. |
| 601 | |
| 602 | Double-check the FOAM server's current configuration: |
| 603 | |
| 604 | {{{ |
| 605 | ssh $foamserver foamctl config:get-value --key="geni.approval.approve-on-creation" --passwd-file=/opt/foam/etc/foampasswd |
| 606 | }}} |
| 607 | |
| 608 | If the value isn't "2", then you shouldn't run this section on this FOAM server. (You can first change the configuration of this FOAM server, but you may not want to do that, e.g. if it's a server that anyone else is using.) |
| 609 | |
| 610 | You can go through all of these tests in sequence; they're further divided into sets of tests for convenience. |
| 611 | |
| 612 | === Four slivers === |
| 613 | |
| 614 | This set of tests uses four rspecs that specify a single feature (IP subnet, MAC address, or ethertype). In each set of four rspecs, the first two (A and B) don't overlap, the third (C) overlaps with one of the first two (A), and the fourth (D) overlaps with all of the first three. |
| 615 | |
| 616 | Each test (one per block below) creates the slivers in a different order, to confirm that the anlysis engine detects overlap regardless of whether a more specific or less specific sliver is created first. Each test deletes any lingering slivers before running, just to make sure the slate is clean. Each test should generate four "sliver created" e-mail messages, plus one "sliver approved" message per sliver that's expected to be automatically approved; and also four "sliver deleted" messages if any slivers were there to be deleted. |
| 617 | |
| 618 | These tests attempt to verify these principles: |
| 619 | |
| 620 | * Whichever of A and C gets created first should be approved, and will then block the other. |
| 621 | * B should always be approved as long as it's created before D, since it isn't blocked by either A or C. |
| 622 | * D should only be approved if it's created first, because otherwise it's blocked by any of A, B, or C; and if it's created first, it blocks all of them. |
| 623 | * If something would block other things if it was approved, it doesn't block those things if it's pending. |
| 624 | |
| 625 | There's a "Four-sliver setup" section to set the A/B/C/D variables, and then a tests section to run the tests. You can re-run the "Four-sliver setup" section, and then re-run the tests section, e.g. to test each of the three features. |
| 626 | |
| 627 | ==== Four-sliver setup ==== |
| 628 | |
| 629 | Do ONE of these, depending on whether you want to test IP, MAC, or ethertype, to define which rspecs to use, and how many FlowVisor flowspace rules to expect if that rspec is approved. |
| 630 | |
| 631 | IP: |
| 632 | |
| 633 | {{{ |
| 634 | rspec_A=$rspec_10_3_5_0_24 |
| 635 | rspec_B=$rspec_10_7_9_0_24 |
| 636 | rspec_C=$rspec_10_3_0_0_16 |
| 637 | rspec_D=$rspec_10_0_0_0_12 |
| 638 | |
| 639 | rules_A=2 |
| 640 | rules_B=2 |
| 641 | rules_C=2 |
| 642 | rules_D=2 |
| 643 | }}} |
| 644 | |
| 645 | MAC: |
| 646 | |
| 647 | {{{ |
| 648 | rspec_A=$rspec_cafebeefface |
| 649 | rspec_B=$rspec_deadbeadfeed |
| 650 | rspec_C=$rspec_aced_and_cafe |
| 651 | rspec_D=$rspec_aced_and_cafe_and_dead |
| 652 | |
| 653 | rules_A=2 |
| 654 | rules_B=2 |
| 655 | rules_C=4 |
| 656 | rules_D=6 |
| 657 | }}} |
| 658 | |
| 659 | Ethertype: |
| 660 | |
| 661 | {{{ |
| 662 | rspec_A=$rspec_ethertype_3171 |
| 663 | rspec_B=$rspec_ethertype_3172 |
| 664 | rspec_C=$rspec_ethertype_3173_and_3171 |
| 665 | rspec_D=$rspec_ethertype_3173_and_3172_and_3171 |
| 666 | |
| 667 | rules_A=1 |
| 668 | rules_B=1 |
| 669 | rules_C=2 |
| 670 | rules_D=3 |
| 671 | }}} |
| 672 | |
| 673 | Now you're ready to run the four-sliver tests. |
| 674 | |
| 675 | ==== Four-sliver tests ==== |
| 676 | |
| 677 | ABCD - A and B should be approved, C and D should be pending: |
| 678 | |
| 679 | {{{ |
| 680 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 681 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_A approved true $rules_A |
| 682 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_B approved true $rules_B |
| 683 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_C pending false 0 |
| 684 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_D pending false 0 |
| 685 | }}} |
| 686 | |
| 687 | ACBD - A should be approved, C pending, B approved, and D pending: |
| 688 | |
| 689 | {{{ |
| 690 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 691 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_A approved true $rules_A |
| 692 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_C pending false 0 |
| 693 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_B approved true $rules_B |
| 694 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_D pending false 0 |
| 695 | }}} |
| 696 | |
| 697 | BACD - B and A should be approved, C and D pending should be pending: |
| 698 | |
| 699 | {{{ |
| 700 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 701 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_B approved true $rules_B |
| 702 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_A approved true $rules_A |
| 703 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_C pending false 0 |
| 704 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_D pending false 0 |
| 705 | }}} |
| 706 | |
| 707 | BCAD - B and C should be approved, A and D should be pending: |
| 708 | |
| 709 | {{{ |
| 710 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 711 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_B approved true $rules_B |
| 712 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_C approved true $rules_C |
| 713 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_A pending false 0 |
| 714 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_D pending false 0 |
| 715 | }}} |
| 716 | |
| 717 | CABD - C should be approved, A pending, B approved, and D pending: |
| 718 | |
| 719 | {{{ |
| 720 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 721 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_C approved true $rules_C |
| 722 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_A pending false 0 |
| 723 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_B approved true $rules_B |
| 724 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_D pending false 0 |
| 725 | }}} |
| 726 | |
| 727 | CBAD - C and B should be approved, A and D should be pending: |
| 728 | |
| 729 | {{{ |
| 730 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 731 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_C approved true $rules_C |
| 732 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_B approved true $rules_B |
| 733 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_A pending false 0 |
| 734 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_D pending false 0 |
| 735 | }}} |
| 736 | |
| 737 | DABC - D should be approved, A and B and C should be pending: |
| 738 | |
| 739 | {{{ |
| 740 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 741 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_D approved true $rules_D |
| 742 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_A pending false 0 |
| 743 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_B pending false 0 |
| 744 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_C pending false 0 |
| 745 | }}} |
| 746 | |
| 747 | ADBC - A should be approved, D pending, B approved, and C pending: |
| 748 | |
| 749 | {{{ |
| 750 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 751 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_A approved true $rules_A |
| 752 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_D pending false 0 |
| 753 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_B approved true $rules_B |
| 754 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_C pending false 0 |
| 755 | }}} |
| 756 | |
| 757 | ADCB - A should be approved, D pending, C pending, and B approved: |
| 758 | |
| 759 | {{{ |
| 760 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 761 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_A approved true $rules_A |
| 762 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_D pending false 0 |
| 763 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_C pending false 0 |
| 764 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_B approved true $rules_B |
| 765 | }}} |
| 766 | |
| 767 | Delete any remaining slivers: |
| 768 | |
| 769 | {{{ |
| 770 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 771 | }}} |
| 772 | |
| 773 | === Three-feature slivers === |
| 774 | |
| 775 | This set of tests uses an rspec that reserves all three features (an IP subnet, a MAC address, and an Ethertype), and tests situations where the three-way rspec does and doesn't overlap with other rspecs that only reserve one of those three things. |
| 776 | |
| 777 | Each test (one per block below) creates the slivers in a different order, to confirm that the anlysis engine detects overlap regardless of whether a more specific or less specific sliver is created first. Each test deletes any lingering slivers before running, just to make sure the slate is clean. Each test should generate four "sliver created" e-mail messages, plus one "sliver approved" message per sliver that's expected to be automatically approved; and also four "sliver deleted" messages if any slivers were there to be deleted. |
| 778 | |
| 779 | These tests attempt to verify these principles: |
| 780 | |
| 781 | * If the three-way sliver doesn't overlap with any of the one-way slivers, they all get approved. |
| 782 | * If the three-way sliver overlaps with the others: |
| 783 | * It should be approved if it's created first, and the others should be pending. |
| 784 | * It should be pending if it's created last, and the others should be approved. |
| 785 | * If any one-way sliver is created first, and the three-way sliver is created second, the three-way sliver should be pending, and the others should all be approved. |
| 786 | |
| 787 | This set of tests doesn't need any additional setup. |
| 788 | |
| 789 | No overlap, three-way first: |
| 790 | |
| 791 | {{{ |
| 792 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 793 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_one_of_each approved true 5 |
| 794 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_7_9_0_24 approved true 2 |
| 795 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_deadbeadfeed approved true 2 |
| 796 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3172 approved true 1 |
| 797 | }}} |
| 798 | |
| 799 | No overlap, three-way last: |
| 800 | |
| 801 | {{{ |
| 802 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 803 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_one_of_each approved true 5 |
| 804 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_7_9_0_24 approved true 2 |
| 805 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_deadbeadfeed approved true 2 |
| 806 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3172 approved true 1 |
| 807 | }}} |
| 808 | |
| 809 | Overlap, three-way first: |
| 810 | |
| 811 | {{{ |
| 812 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 813 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_one_of_each approved true 5 |
| 814 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_3_5_0_24 pending false 0 |
| 815 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_cafebeefface pending false 0 |
| 816 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3171 pending false 0 |
| 817 | }}} |
| 818 | |
| 819 | Overlap three-way last: |
| 820 | |
| 821 | {{{ |
| 822 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 823 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_10_3_5_0_24 approved true 2 |
| 824 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_cafebeefface approved true 2 |
| 825 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_ethertype_3171 approved true 1 |
| 826 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_one_of_each pending false 0 |
| 827 | }}} |
| 828 | |
| 829 | Overlap, three-way second, IP first: |
| 830 | |
| 831 | {{{ |
| 832 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 833 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_10_3_5_0_24 approved true 2 |
| 834 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_one_of_each pending false 0 |
| 835 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_cafebeefface approved true 2 |
| 836 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3171 approved true 1 |
| 837 | }}} |
| 838 | |
| 839 | Overlap, three-way second, MAC first: |
| 840 | |
| 841 | {{{ |
| 842 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 843 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_cafebeefface approved true 2 |
| 844 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_one_of_each pending false 0 |
| 845 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_10_3_5_0_24 approved true 2 |
| 846 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3171 approved true 1 |
| 847 | }}} |
| 848 | |
| 849 | Overlap, three-way second, ethertype first: |
| 850 | |
| 851 | {{{ |
| 852 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 853 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_ethertype_3171 approved true 1 |
| 854 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_one_of_each pending false 0 |
| 855 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_10_3_5_0_24 approved true 2 |
| 856 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_cafebeefface approved true 2 |
| 857 | }}} |
| 858 | |
| 859 | Delete any remaining slivers: |
| 860 | |
| 861 | {{{ |
| 862 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 863 | }}} |
| 864 | |
| 865 | === Forbidden slivers === |
| 866 | |
| 867 | This set of tests uses rspecs containing things that should never be auto-approved. (Currently, only one of them, an rspec containing an entire VLAN.) |
| 868 | |
| 869 | Create and verify the sliver: |
| 870 | |
| 871 | {{{ |
| 872 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_subnet_and_vlan pending false 0 |
| 873 | }}} |
| 874 | |
| 875 | (That should generate one "sliver created" and no "sliver approved" e-mail messages, one set to the experimenter and one set to the FOAM admin.) |
| 876 | |
| 877 | Delete the sliver: |
| 878 | |
| 879 | {{{ |
| 880 | for slicename in $slicename1 ; do omni -a $am deletesliver $slicename ; done |
| 881 | }}} |
| 882 | |
| 883 | == Approval mode 1 ("always") == |
| 884 | |
| 885 | This subsection tests the behavior of FOAM when new slivers are created and geni.approval.approve-on-creation is set to 1 (always). The expected behavior is that all slivers will automatically be approved after they're created. |
| 886 | |
| 887 | Double-check the FOAM server's current configuration: |
| 888 | |
| 889 | {{{ |
| 890 | ssh $foamserver foamctl config:get-value --key="geni.approval.approve-on-creation" --passwd-file=/opt/foam/etc/foampasswd |
| 891 | }}} |
| 892 | |
| 893 | If the value isn't "1", then you shouldn't run this section on this FOAM server. (You can first change the configuration of this FOAM server, but you may not want to do that, e.g. if it's a server that anyone else is using.) |
| 894 | |
| 895 | You can go through all of these tests in sequence; they're divided into blocks of four because we only try creating four slivers at a time. |
| 896 | |
| 897 | IP subnets, smaller subnets first: |
| 898 | |
| 899 | {{{ |
| 900 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 901 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_10_3_5_0_24 approved true 2 |
| 902 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_7_9_0_24 approved true 2 |
| 903 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_10_3_0_0_16 approved true 2 |
| 904 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_10_0_0_0_12 approved true 2 |
| 905 | }}} |
| 906 | |
| 907 | IP subnets, larger subnets first: |
| 908 | |
| 909 | {{{ |
| 910 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 911 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_10_0_0_0_12 approved true 2 |
| 912 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_3_5_0_24 approved true 2 |
| 913 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_10_7_9_0_24 approved true 2 |
| 914 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_10_3_0_0_16 approved true 2 |
| 915 | }}} |
| 916 | |
| 917 | MAC addresses, single addresses first: |
| 918 | |
| 919 | {{{ |
| 920 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 921 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_cafebeefface approved true 2 |
| 922 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_deadbeadfeed approved true 2 |
| 923 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_aced_and_cafe approved true 4 |
| 924 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_aced_and_cafe_and_dead approved true 6 |
| 925 | }}} |
| 926 | |
| 927 | MAC addresses, multiple addresses first: |
| 928 | |
| 929 | {{{ |
| 930 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 931 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_aced_and_cafe_and_dead approved true 6 |
| 932 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_cafebeefface approved true 2 |
| 933 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_deadbeadfeed approved true 2 |
| 934 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_aced_and_cafe approved true 4 |
| 935 | }}} |
| 936 | |
| 937 | Ethertypes, single ethertypes first: |
| 938 | |
| 939 | {{{ |
| 940 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 941 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_ethertype_3171 approved true 1 |
| 942 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_ethertype_3172 approved true 1 |
| 943 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_ethertype_3173_and_3171 approved true 2 |
| 944 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3173_and_3172_and_3171 approved true 3 |
| 945 | }}} |
| 946 | |
| 947 | Ethertypes, single ethertypes last: |
| 948 | |
| 949 | {{{ |
| 950 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 951 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_ethertype_3173_and_3172_and_3171 approved true 3 |
| 952 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_ethertype_3171 approved true 1 |
| 953 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_ethertype_3172 approved true 1 |
| 954 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3173_and_3171 approved true 2 |
| 955 | }}} |
| 956 | |
| 957 | Three-feature slivers with no overlap, three-way first: |
| 958 | |
| 959 | {{{ |
| 960 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 961 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_one_of_each approved true 5 |
| 962 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_7_9_0_24 approved true 2 |
| 963 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_deadbeadfeed approved true 2 |
| 964 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3172 approved true 1 |
| 965 | }}} |
| 966 | |
| 967 | Three-feature slivers with no overlap, three-way last: |
| 968 | |
| 969 | {{{ |
| 970 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 971 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_one_of_each approved true 5 |
| 972 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_7_9_0_24 approved true 2 |
| 973 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_deadbeadfeed approved true 2 |
| 974 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3172 approved true 1 |
| 975 | }}} |
| 976 | |
| 977 | Three-feature slivers with overlap, three-way first: |
| 978 | |
| 979 | {{{ |
| 980 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 981 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_one_of_each approved true 5 |
| 982 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_3_5_0_24 approved true 2 |
| 983 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_cafebeefface approved true 2 |
| 984 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3171 approved true 1 |
| 985 | }}} |
| 986 | |
| 987 | Three-feature slivers with overlap, three-way last: |
| 988 | |
| 989 | {{{ |
| 990 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 991 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_10_3_5_0_24 approved true 2 |
| 992 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_cafebeefface approved true 2 |
| 993 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_ethertype_3171 approved true 1 |
| 994 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_one_of_each approved true 5 |
| 995 | }}} |
| 996 | |
| 997 | Forbidden slivers: |
| 998 | |
| 999 | {{{ |
| 1000 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1001 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_subnet_and_vlan approved true 3 |
| 1002 | }}} |
| 1003 | |
| 1004 | Delete any remaining slivers: |
| 1005 | |
| 1006 | {{{ |
| 1007 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1008 | }}} |
| 1009 | |
| 1010 | == Approval mode 0 ("never") == |
| 1011 | |
| 1012 | This subsection tests the behavior of FOAM when new slivers are created and geni.approval.approve-on-creation is set to 0 (never). The expected behavior is that all slivers will automatically be pending after they're created. |
| 1013 | |
| 1014 | Double-check the FOAM server's current configuration: |
| 1015 | |
| 1016 | {{{ |
| 1017 | ssh $foamserver foamctl config:get-value --key="geni.approval.approve-on-creation" --passwd-file=/opt/foam/etc/foampasswd |
| 1018 | }}} |
| 1019 | |
| 1020 | If the value isn't "0", then you shouldn't run this section on this FOAM server. (You can first change the configuration of this FOAM server, but you may not want to do that, e.g. if it's a server that anyone else is using.) |
| 1021 | |
| 1022 | You can go through all of these tests in sequence; they're divided into blocks of four because we only try creating four slivers at a time. |
| 1023 | |
| 1024 | IP subnets, smaller subnets first: |
| 1025 | |
| 1026 | {{{ |
| 1027 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1028 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_10_3_5_0_24 pending false 0 |
| 1029 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_7_9_0_24 pending false 0 |
| 1030 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_10_3_0_0_16 pending false 0 |
| 1031 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_10_0_0_0_12 pending false 0 |
| 1032 | }}} |
| 1033 | |
| 1034 | IP subnets, larger subnets first: |
| 1035 | |
| 1036 | {{{ |
| 1037 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1038 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_10_0_0_0_12 pending false 0 |
| 1039 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_3_5_0_24 pending false 0 |
| 1040 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_10_7_9_0_24 pending false 0 |
| 1041 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_10_3_0_0_16 pending false 0 |
| 1042 | }}} |
| 1043 | |
| 1044 | MAC addresses, single addresses first: |
| 1045 | |
| 1046 | {{{ |
| 1047 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1048 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_cafebeefface pending false 0 |
| 1049 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_deadbeadfeed pending false 0 |
| 1050 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_aced_and_cafe pending false 0 |
| 1051 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_aced_and_cafe_and_dead pending false 0 |
| 1052 | }}} |
| 1053 | |
| 1054 | MAC addresses, multiple addresses first: |
| 1055 | |
| 1056 | {{{ |
| 1057 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1058 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_aced_and_cafe_and_dead pending false 0 |
| 1059 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_cafebeefface pending false 0 |
| 1060 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_deadbeadfeed pending false 0 |
| 1061 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_aced_and_cafe pending false 0 |
| 1062 | }}} |
| 1063 | |
| 1064 | Ethertypes, single ethertypes first: |
| 1065 | |
| 1066 | {{{ |
| 1067 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1068 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_ethertype_3171 pending false 0 |
| 1069 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_ethertype_3172 pending false 0 |
| 1070 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_ethertype_3173_and_3171 pending false 0 |
| 1071 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3173_and_3172_and_3171 pending false 0 |
| 1072 | }}} |
| 1073 | |
| 1074 | Ethertypes, single ethertypes last: |
| 1075 | |
| 1076 | {{{ |
| 1077 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1078 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_ethertype_3173_and_3172_and_3171 pending false 0 |
| 1079 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_ethertype_3171 pending false 0 |
| 1080 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_ethertype_3172 pending false 0 |
| 1081 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3173_and_3171 pending false 0 |
| 1082 | }}} |
| 1083 | |
| 1084 | Three-feature slivers with no overlap, three-way first: |
| 1085 | |
| 1086 | {{{ |
| 1087 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1088 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_one_of_each pending false 0 |
| 1089 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_7_9_0_24 pending false 0 |
| 1090 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_deadbeadfeed pending false 0 |
| 1091 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3172 pending false 0 |
| 1092 | }}} |
| 1093 | |
| 1094 | Three-feature slivers with no overlap, three-way last: |
| 1095 | |
| 1096 | {{{ |
| 1097 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1098 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_one_of_each pending false 0 |
| 1099 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_7_9_0_24 pending false 0 |
| 1100 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_deadbeadfeed pending false 0 |
| 1101 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3172 pending false 0 |
| 1102 | }}} |
| 1103 | |
| 1104 | Three-feature slivers with overlap, three-way first: |
| 1105 | |
| 1106 | {{{ |
| 1107 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1108 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_one_of_each pending false 0 |
| 1109 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_10_3_5_0_24 pending false 0 |
| 1110 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_cafebeefface pending false 0 |
| 1111 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_ethertype_3171 pending false 0 |
| 1112 | }}} |
| 1113 | |
| 1114 | Three-feature slivers with overlap, three-way last: |
| 1115 | |
| 1116 | {{{ |
| 1117 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1118 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_10_3_5_0_24 pending false 0 |
| 1119 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename2 $rspec_cafebeefface pending false 0 |
| 1120 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename3 $rspec_ethertype_3171 pending false 0 |
| 1121 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename4 $rspec_one_of_each pending false 0 |
| 1122 | }}} |
| 1123 | |
| 1124 | Forbidden slivers: |
| 1125 | |
| 1126 | {{{ |
| 1127 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1128 | foam-create-and-verify-sliver -q $foamserver $fvserver $am $slicename1 $rspec_subnet_and_vlan pending false 0 |
| 1129 | }}} |
| 1130 | |
| 1131 | Delete any remaining slivers: |
| 1132 | |
| 1133 | {{{ |
| 1134 | for slicename in $slicename1 $slicename2 $slicename3 $slicename4 ; do omni -a $am deletesliver $slicename ; done |
| 1135 | }}} |
| 1136 | |