kanrisuru 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +5 -5
- data/lib/kanrisuru/command.rb +10 -0
- data/lib/kanrisuru/core/apt/parsers/base.rb +1 -1
- data/lib/kanrisuru/core/ip/commands/address.rb +64 -47
- data/lib/kanrisuru/core/ip/commands/address_label.rb +32 -16
- data/lib/kanrisuru/core/ip/commands/link.rb +96 -54
- data/lib/kanrisuru/core/ip/commands/link_set_opts.rb +61 -0
- data/lib/kanrisuru/core/ip/commands/link_type_opts.rb +313 -0
- data/lib/kanrisuru/core/ip/commands/maddress.rb +22 -13
- data/lib/kanrisuru/core/ip/commands/neighbour.rb +49 -32
- data/lib/kanrisuru/core/ip/commands/route.rb +130 -93
- data/lib/kanrisuru/core/ip/commands/rule.rb +37 -22
- data/lib/kanrisuru/core/ip/commands.rb +5 -3
- data/lib/kanrisuru/core/ip/constants.rb +12 -0
- data/lib/kanrisuru/core/ip/parser.rb +1 -0
- data/lib/kanrisuru/core/ip/parsers/version.rb +15 -0
- data/lib/kanrisuru/core/ip.rb +10 -7
- data/lib/kanrisuru/version.rb +1 -1
- data/spec/functional/core/ip/ip_address_label_spec.rb +81 -0
- data/spec/functional/core/ip/ip_address_spec.rb +95 -0
- data/spec/functional/core/ip/ip_link_spec.rb +814 -0
- data/spec/functional/core/ip/ip_maddress_spec.rb +78 -0
- data/spec/functional/core/ip/ip_neighbour_spec.rb +119 -0
- data/spec/functional/core/ip/ip_route_spec.rb +174 -0
- data/spec/functional/core/ip/ip_rule_spec.rb +75 -0
- data/spec/functional/core/ip/ip_spec.rb +27 -0
- data/spec/support/shared_examples/integration/core/transfer.rb +1 -1
- metadata +13 -2
| @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            RSpec.describe Kanrisuru::Core::IP do
         | 
| 6 | 
            +
              before(:all) do
         | 
| 7 | 
            +
                StubNetwork.stub!
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              after(:all) do
         | 
| 11 | 
            +
                StubNetwork.unstub!
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              let(:host) do
         | 
| 15 | 
            +
                Kanrisuru::Remote::Host.new(
         | 
| 16 | 
            +
                  host: 'localhost',
         | 
| 17 | 
            +
                  username: 'ubuntu',
         | 
| 18 | 
            +
                  keys: ['id_rsa']
         | 
| 19 | 
            +
                )
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              %w[maddress maddr m].each do |object_variant|
         | 
| 23 | 
            +
                context "with ip #{object_variant}" do
         | 
| 24 | 
            +
                  context 'with json support' do
         | 
| 25 | 
            +
                    before(:all) do
         | 
| 26 | 
            +
                      StubNetwork.stub_command!(:ip_version) do
         | 
| 27 | 
            +
                        Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION
         | 
| 28 | 
            +
                      end
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    after(:all) do
         | 
| 32 | 
            +
                      StubNetwork.unstub_command!(:ip_version)
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    %w[show list].each do |action_variant|
         | 
| 36 | 
            +
                      it "prepares #{action_variant} command" do
         | 
| 37 | 
            +
                        expect_command(host.ip(object_variant, action_variant), 'ip -json maddress show')
         | 
| 38 | 
            +
                        expect_command(host.ip(object_variant, action_variant, {
         | 
| 39 | 
            +
                                                 dev: 'eth0',
         | 
| 40 | 
            +
                                                 family: 'inet'
         | 
| 41 | 
            +
                                               }), 'ip -json -family inet maddress show dev eth0')
         | 
| 42 | 
            +
                      end
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  context 'without json support' do
         | 
| 47 | 
            +
                    before(:all) do
         | 
| 48 | 
            +
                      StubNetwork.stub_command!(:ip_version) do
         | 
| 49 | 
            +
                        Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION - 23
         | 
| 50 | 
            +
                      end
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    after(:all) do
         | 
| 54 | 
            +
                      StubNetwork.unstub_command!(:ip_version)
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                    %w[show list].each do |action_variant|
         | 
| 58 | 
            +
                      it "prepares #{action_variant} command" do
         | 
| 59 | 
            +
                        expect_command(host.ip(object_variant, action_variant), 'ip maddress show')
         | 
| 60 | 
            +
                        expect_command(host.ip(object_variant, action_variant, {
         | 
| 61 | 
            +
                                                 dev: 'eth0',
         | 
| 62 | 
            +
                                                 family: 'inet'
         | 
| 63 | 
            +
                                               }), 'ip -family inet maddress show dev eth0')
         | 
| 64 | 
            +
                      end
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  %w[add delete del].each do |action_variant|
         | 
| 69 | 
            +
                    it "prepares #{action_variant} command" do
         | 
| 70 | 
            +
                      expect_command(host.ip(object_variant, action_variant, {
         | 
| 71 | 
            +
                                               address: '01:80:c2:00:00:0e',
         | 
| 72 | 
            +
                                               dev: 'eth0'
         | 
| 73 | 
            +
                                             }), "ip maddress #{action_variant} address 01:80:c2:00:00:0e dev eth0")
         | 
| 74 | 
            +
                    end
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
            end
         | 
| @@ -0,0 +1,119 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            RSpec.describe Kanrisuru::Core::IP do
         | 
| 6 | 
            +
              before(:all) do
         | 
| 7 | 
            +
                StubNetwork.stub!
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              after(:all) do
         | 
| 11 | 
            +
                StubNetwork.unstub!
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              let(:host) do
         | 
| 15 | 
            +
                Kanrisuru::Remote::Host.new(
         | 
| 16 | 
            +
                  host: 'localhost',
         | 
| 17 | 
            +
                  username: 'ubuntu',
         | 
| 18 | 
            +
                  keys: ['id_rsa']
         | 
| 19 | 
            +
                )
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              %w[neighbour neigh n].each do |object_variant|
         | 
| 23 | 
            +
                context "with ip #{object_variant}" do
         | 
| 24 | 
            +
                  context 'with json support' do
         | 
| 25 | 
            +
                    before(:all) do
         | 
| 26 | 
            +
                      StubNetwork.stub_command!(:ip_version) do
         | 
| 27 | 
            +
                        Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION
         | 
| 28 | 
            +
                      end
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    after(:all) do
         | 
| 32 | 
            +
                      StubNetwork.unstub_command!(:ip_version)
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    %w[show list].each do |action_variant|
         | 
| 36 | 
            +
                      it "prepares #{action_variant} command" do
         | 
| 37 | 
            +
                        expect_command(host.ip(object_variant), 'ip -json neighbour show')
         | 
| 38 | 
            +
                        expect_command(host.ip(object_variant, {
         | 
| 39 | 
            +
                                                 stats: true,
         | 
| 40 | 
            +
                                                 to: '10.10.10.10',
         | 
| 41 | 
            +
                                                 dev: 'ens3',
         | 
| 42 | 
            +
                                                 vrf: 'red',
         | 
| 43 | 
            +
                                                 proxy: true,
         | 
| 44 | 
            +
                                                 unused: true,
         | 
| 45 | 
            +
                                                 nud: 'all'
         | 
| 46 | 
            +
                                               }), 'ip -json -s neighbour show to 10.10.10.10 dev ens3 nud all proxy unused')
         | 
| 47 | 
            +
                      end
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  context 'without json support' do
         | 
| 52 | 
            +
                    before(:all) do
         | 
| 53 | 
            +
                      StubNetwork.stub_command!(:ip_version) do
         | 
| 54 | 
            +
                        Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION - 10
         | 
| 55 | 
            +
                      end
         | 
| 56 | 
            +
                    end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                    after(:all) do
         | 
| 59 | 
            +
                      StubNetwork.unstub_command!(:ip_version)
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                    %w[show list].each do |action_variant|
         | 
| 63 | 
            +
                      it "prepares #{action_variant} command" do
         | 
| 64 | 
            +
                        expect_command(host.ip(object_variant), 'ip neighbour show')
         | 
| 65 | 
            +
                        expect_command(host.ip(object_variant, {
         | 
| 66 | 
            +
                                                 stats: true,
         | 
| 67 | 
            +
                                                 to: '10.10.10.10',
         | 
| 68 | 
            +
                                                 dev: 'ens3',
         | 
| 69 | 
            +
                                                 vrf: 'red',
         | 
| 70 | 
            +
                                                 proxy: true,
         | 
| 71 | 
            +
                                                 unused: true,
         | 
| 72 | 
            +
                                                 nud: 'all'
         | 
| 73 | 
            +
                                               }), 'ip -s neighbour show to 10.10.10.10 dev ens3 nud all proxy unused')
         | 
| 74 | 
            +
                      end
         | 
| 75 | 
            +
                    end
         | 
| 76 | 
            +
                  end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                  %w[add change replace].each do |action_variant|
         | 
| 79 | 
            +
                    it "prepares #{action_variant} command" do
         | 
| 80 | 
            +
                      expect_command(host.ip(object_variant, action_variant, {
         | 
| 81 | 
            +
                                               to: '192.168.16.14',
         | 
| 82 | 
            +
                                               dev: 'eno1',
         | 
| 83 | 
            +
                                               proxy: true,
         | 
| 84 | 
            +
                                               router: true,
         | 
| 85 | 
            +
                                               extern_learn: true,
         | 
| 86 | 
            +
                                               permanent: true,
         | 
| 87 | 
            +
                                               nud: 'probe',
         | 
| 88 | 
            +
                                               lladdr: '17:39:D1:24:53:CF'
         | 
| 89 | 
            +
                                             }), "ip neighbour #{action_variant} to 192.168.16.14 dev eno1 lladdr 17:39:D1:24:53:CF nud probe proxy router extern_learn")
         | 
| 90 | 
            +
                    end
         | 
| 91 | 
            +
                  end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  %w[delete del].each do |action_variant|
         | 
| 94 | 
            +
                    it "prepares #{action_variant} command" do
         | 
| 95 | 
            +
                      expect_command(host.ip(object_variant, action_variant, {
         | 
| 96 | 
            +
                                               to: '192.168.16.14',
         | 
| 97 | 
            +
                                               dev: 'eno1',
         | 
| 98 | 
            +
                                               proxy: true,
         | 
| 99 | 
            +
                                               router: true,
         | 
| 100 | 
            +
                                               extern_learn: true,
         | 
| 101 | 
            +
                                               permanent: true
         | 
| 102 | 
            +
                                             }), "ip neighbour #{action_variant} to 192.168.16.14 dev eno1 proxy router extern_learn")
         | 
| 103 | 
            +
                    end
         | 
| 104 | 
            +
                  end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                  it 'prepares flush command' do
         | 
| 107 | 
            +
                    expect_command(host.ip(object_variant, 'flush', {
         | 
| 108 | 
            +
                                             stats: true,
         | 
| 109 | 
            +
                                             to: '10.10.10.10',
         | 
| 110 | 
            +
                                             dev: 'ens3',
         | 
| 111 | 
            +
                                             vrf: 'red',
         | 
| 112 | 
            +
                                             proxy: true,
         | 
| 113 | 
            +
                                             unused: true,
         | 
| 114 | 
            +
                                             nud: 'all'
         | 
| 115 | 
            +
                                           }), 'ip -s neighbour flush to 10.10.10.10 dev ens3 nud all unused')
         | 
| 116 | 
            +
                  end
         | 
| 117 | 
            +
                end
         | 
| 118 | 
            +
              end
         | 
| 119 | 
            +
            end
         | 
| @@ -0,0 +1,174 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            RSpec.describe Kanrisuru::Core::IP do
         | 
| 6 | 
            +
              before(:all) do
         | 
| 7 | 
            +
                StubNetwork.stub!
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              after(:all) do
         | 
| 11 | 
            +
                StubNetwork.unstub!
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              let(:host) do
         | 
| 15 | 
            +
                Kanrisuru::Remote::Host.new(
         | 
| 16 | 
            +
                  host: 'localhost',
         | 
| 17 | 
            +
                  username: 'ubuntu',
         | 
| 18 | 
            +
                  keys: ['id_rsa']
         | 
| 19 | 
            +
                )
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              %w[route r ro rou rout].each do |object_variant|
         | 
| 23 | 
            +
                context "with ip #{object_variant}" do
         | 
| 24 | 
            +
                  context 'with json support' do
         | 
| 25 | 
            +
                    before(:all) do
         | 
| 26 | 
            +
                      StubNetwork.stub_command!(:ip_version) do
         | 
| 27 | 
            +
                        Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION
         | 
| 28 | 
            +
                      end
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    after(:all) do
         | 
| 32 | 
            +
                      StubNetwork.unstub_command!(:ip_version)
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    %w[show list].each do |action_variant|
         | 
| 36 | 
            +
                      it "prepares #{action_variant} command" do
         | 
| 37 | 
            +
                        expect_command(host.ip(object_variant), 'ip -json route show')
         | 
| 38 | 
            +
                        expect_command(host.ip(object_variant, {
         | 
| 39 | 
            +
                                                 family: 'inet',
         | 
| 40 | 
            +
                                                 to: '10.0/16',
         | 
| 41 | 
            +
                                                 from: '10.1/16',
         | 
| 42 | 
            +
                                                 dev: 'eno4',
         | 
| 43 | 
            +
                                                 protocol: 'kernel',
         | 
| 44 | 
            +
                                                 dsfield: '0x30',
         | 
| 45 | 
            +
                                                 table: 'all',
         | 
| 46 | 
            +
                                                 vrf: 'blue',
         | 
| 47 | 
            +
                                                 cloned: true,
         | 
| 48 | 
            +
                                                 cached: true,
         | 
| 49 | 
            +
                                                 via: '10.0.0.1',
         | 
| 50 | 
            +
                                                 src: '10.5.5.5',
         | 
| 51 | 
            +
                                                 realms: '6'
         | 
| 52 | 
            +
                                               }), 'ip -json -family inet route show to 10.0/16 dev eno4 protocol kernel table all dsfield 0x30 via 10.0.0.1 vrf blue src 10.5.5.5 realms 6 cloned cached')
         | 
| 53 | 
            +
                      end
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  context 'without json support' do
         | 
| 58 | 
            +
                    before(:all) do
         | 
| 59 | 
            +
                      StubNetwork.stub_command!(:ip_version) do
         | 
| 60 | 
            +
                        Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION - 33
         | 
| 61 | 
            +
                      end
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                    after(:all) do
         | 
| 65 | 
            +
                      StubNetwork.unstub_command!(:ip_version)
         | 
| 66 | 
            +
                    end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                    %w[show list].each do |action_variant|
         | 
| 69 | 
            +
                      it "prepares #{action_variant} command" do
         | 
| 70 | 
            +
                        expect_command(host.ip(object_variant), 'ip route show')
         | 
| 71 | 
            +
                        expect_command(host.ip(object_variant, {
         | 
| 72 | 
            +
                                                 family: 'inet',
         | 
| 73 | 
            +
                                                 to: '10.0/16',
         | 
| 74 | 
            +
                                                 from: '10.1/16',
         | 
| 75 | 
            +
                                                 dev: 'eno4',
         | 
| 76 | 
            +
                                                 protocol: 'kernel',
         | 
| 77 | 
            +
                                                 dsfield: '0x30',
         | 
| 78 | 
            +
                                                 table: 'all',
         | 
| 79 | 
            +
                                                 vrf: 'blue',
         | 
| 80 | 
            +
                                                 cloned: true,
         | 
| 81 | 
            +
                                                 cached: true,
         | 
| 82 | 
            +
                                                 via: '10.0.0.1',
         | 
| 83 | 
            +
                                                 src: '10.5.5.5',
         | 
| 84 | 
            +
                                                 realms: '6'
         | 
| 85 | 
            +
                                               }), 'ip -family inet route show to 10.0/16 dev eno4 protocol kernel table all dsfield 0x30 via 10.0.0.1 vrf blue src 10.5.5.5 realms 6 cloned cached')
         | 
| 86 | 
            +
                      end
         | 
| 87 | 
            +
                    end
         | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                  %w[add change append del delete replace].each do |action_variant|
         | 
| 91 | 
            +
                    it "prepares #{action_variant} command" do
         | 
| 92 | 
            +
                      expect_command(host.ip(object_variant, action_variant, {
         | 
| 93 | 
            +
                                               dev: 'eno2',
         | 
| 94 | 
            +
                                               mtu: 1600,
         | 
| 95 | 
            +
                                               congctl: 'test'
         | 
| 96 | 
            +
                                             }), "ip route #{action_variant} dev eno2 mtu 1600 congctl test")
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                      expect_command(host.ip(object_variant, action_variant, {
         | 
| 99 | 
            +
                                               to: '0/0',
         | 
| 100 | 
            +
                                               tos: '0x28',
         | 
| 101 | 
            +
                                               dsfield: '0x98',
         | 
| 102 | 
            +
                                               metric: 32,
         | 
| 103 | 
            +
                                               table: 254,
         | 
| 104 | 
            +
                                               vrf: 'green',
         | 
| 105 | 
            +
                                               src: '172.3.3.3',
         | 
| 106 | 
            +
                                               realm: '6',
         | 
| 107 | 
            +
                                               mtu: 1600,
         | 
| 108 | 
            +
                                               mtu_lock: true,
         | 
| 109 | 
            +
                                               window: 3,
         | 
| 110 | 
            +
                                               rtt: 4,
         | 
| 111 | 
            +
                                               rttvar: 12,
         | 
| 112 | 
            +
                                               rto_min: 1,
         | 
| 113 | 
            +
                                               sshthresh: 0,
         | 
| 114 | 
            +
                                               cwnd: 12,
         | 
| 115 | 
            +
                                               initcwnd: 5,
         | 
| 116 | 
            +
                                               initrwnd: 5,
         | 
| 117 | 
            +
                                               features: 'ecn',
         | 
| 118 | 
            +
                                               quickack: 'true',
         | 
| 119 | 
            +
                                               fastopen_no_cookie: 'true',
         | 
| 120 | 
            +
                                               congctl: 'test',
         | 
| 121 | 
            +
                                               congctl_lock: true,
         | 
| 122 | 
            +
                                               advmss: 7,
         | 
| 123 | 
            +
                                               reordering: 3,
         | 
| 124 | 
            +
                                               next_hop: {
         | 
| 125 | 
            +
                                                 via: '172.0.0.0',
         | 
| 126 | 
            +
                                                 dev: 'gateway',
         | 
| 127 | 
            +
                                                 weight: 100
         | 
| 128 | 
            +
                                               },
         | 
| 129 | 
            +
                                               scope: 0,
         | 
| 130 | 
            +
                                               protocol: 'static',
         | 
| 131 | 
            +
                                               onlink: true,
         | 
| 132 | 
            +
                                               pref: 'high'
         | 
| 133 | 
            +
                                             }), "ip route #{action_variant} to 0/0 tos 0x28 dsfield 0x98 metric 32 table 254 vrf green src 172.3.3.3 realm 6 mtu lock 1600 window 3 rtt 4 rttvar 12 rto_min 1 cwnd 12 initcwnd 5 initrwnd 5 features ecn quickack true fastopen_no_cookie true congctl lock test advmss 7 reordering 3 next_hop via 172.0.0.0 dev gateway weight 100 scope 0 protocol static onlink pref high")
         | 
| 134 | 
            +
                    end
         | 
| 135 | 
            +
                  end
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                  it 'prepares flush command' do
         | 
| 138 | 
            +
                    expect_command(host.ip(object_variant, 'flush', {
         | 
| 139 | 
            +
                                             family: 'inet',
         | 
| 140 | 
            +
                                             to: '10.0/16',
         | 
| 141 | 
            +
                                             from: '10.1/16',
         | 
| 142 | 
            +
                                             dev: 'eno4',
         | 
| 143 | 
            +
                                             protocol: 'kernel',
         | 
| 144 | 
            +
                                             dsfield: '0x30',
         | 
| 145 | 
            +
                                             table: 'all',
         | 
| 146 | 
            +
                                             vrf: 'blue',
         | 
| 147 | 
            +
                                             cloned: true,
         | 
| 148 | 
            +
                                             cached: true,
         | 
| 149 | 
            +
                                             via: '10.0.0.1',
         | 
| 150 | 
            +
                                             src: '10.5.5.5',
         | 
| 151 | 
            +
                                             realms: '6'
         | 
| 152 | 
            +
                                           }), 'ip -family inet route flush to 10.0/16 dev eno4 protocol kernel table all dsfield 0x30 via 10.0.0.1 vrf blue src 10.5.5.5 realms 6 cloned cached')
         | 
| 153 | 
            +
                  end
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                  it 'prepares get command' do
         | 
| 156 | 
            +
                    expect_command(host.ip(object_variant, 'get', {
         | 
| 157 | 
            +
                                             dev: 'eth1',
         | 
| 158 | 
            +
                                             to: '10.0/16',
         | 
| 159 | 
            +
                                             from: '10.1/16',
         | 
| 160 | 
            +
                                             fibmatch: true,
         | 
| 161 | 
            +
                                             tos: '0x28',
         | 
| 162 | 
            +
                                             dsfield: '0x30',
         | 
| 163 | 
            +
                                             iif: 'eth0',
         | 
| 164 | 
            +
                                             oif: 'eth1',
         | 
| 165 | 
            +
                                             mark: '0x20',
         | 
| 166 | 
            +
                                             ipproto: 'tcp',
         | 
| 167 | 
            +
                                             dport: 80,
         | 
| 168 | 
            +
                                             sport: 80,
         | 
| 169 | 
            +
                                             connected: true
         | 
| 170 | 
            +
                                           }), 'ip route get fibmatch to 10.0/16 from 10.1/16 tos 0x28 dsfield 0x30 iif eth0 oif eth1 mark 0x20 ipproto tcp sport 80 dport 80 connected')
         | 
| 171 | 
            +
                  end
         | 
| 172 | 
            +
                end
         | 
| 173 | 
            +
              end
         | 
| 174 | 
            +
            end
         | 
| @@ -0,0 +1,75 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            RSpec.describe Kanrisuru::Core::IP do
         | 
| 6 | 
            +
              before(:all) do
         | 
| 7 | 
            +
                StubNetwork.stub!
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              after(:all) do
         | 
| 11 | 
            +
                StubNetwork.unstub!
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              let(:host) do
         | 
| 15 | 
            +
                Kanrisuru::Remote::Host.new(
         | 
| 16 | 
            +
                  host: 'localhost',
         | 
| 17 | 
            +
                  username: 'ubuntu',
         | 
| 18 | 
            +
                  keys: ['id_rsa']
         | 
| 19 | 
            +
                )
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              %w[rule ru].each do |object_variant|
         | 
| 23 | 
            +
                context "with ip #{object_variant}" do
         | 
| 24 | 
            +
                  context 'with json support' do
         | 
| 25 | 
            +
                    before(:all) do
         | 
| 26 | 
            +
                      StubNetwork.stub_command!(:ip_version) do
         | 
| 27 | 
            +
                        Kanrisuru::Core::IP::IPROUTE2_JSON_VERSION
         | 
| 28 | 
            +
                      end
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    after(:all) do
         | 
| 32 | 
            +
                      StubNetwork.unstub_command!(:ip_version)
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    %w[show list].each do |action_variant|
         | 
| 36 | 
            +
                      it "prepares #{action_variant} command" do
         | 
| 37 | 
            +
                        expect_command(host.ip(object_variant, action_variant), 'ip -json rule show')
         | 
| 38 | 
            +
                      end
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    %w[add delete del].each do |action_variant|
         | 
| 42 | 
            +
                      it "prepares #{action_variant} command" do
         | 
| 43 | 
            +
                        expect_command(host.ip(object_variant, action_variant, {
         | 
| 44 | 
            +
                                                 type: 'unicast',
         | 
| 45 | 
            +
                                                 from: '0/0',
         | 
| 46 | 
            +
                                                 to: '0/0',
         | 
| 47 | 
            +
                                                 iif: 'eth0',
         | 
| 48 | 
            +
                                                 oif: 'eth1',
         | 
| 49 | 
            +
                                                 tos: '0x28',
         | 
| 50 | 
            +
                                                 dsfield: '0x30',
         | 
| 51 | 
            +
                                                 fwmark: 2,
         | 
| 52 | 
            +
                                                 uidrange: '1-10',
         | 
| 53 | 
            +
                                                 ipproto: 'tcp',
         | 
| 54 | 
            +
                                                 sport: 80,
         | 
| 55 | 
            +
                                                 dport: 80,
         | 
| 56 | 
            +
                                                 priority: 1,
         | 
| 57 | 
            +
                                                 table: 5,
         | 
| 58 | 
            +
                                                 protocol: 'kernel',
         | 
| 59 | 
            +
                                                 suppress_prefixlength: 8,
         | 
| 60 | 
            +
                                                 suppress_ifgroup: 6,
         | 
| 61 | 
            +
                                                 realms: '1',
         | 
| 62 | 
            +
                                                 nat: '10.1.1.1'
         | 
| 63 | 
            +
                                               }), "ip rule #{action_variant} type unicast from 0/0 to 0/0 iif eth0 tos 0x28 dsfield 0x30 fwmark 2 priority 1 table 5 realms 1 nat 10.1.1.1")
         | 
| 64 | 
            +
                      end
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                    it 'prepares flush command' do
         | 
| 68 | 
            +
                      expect_command(host.ip(object_variant, 'flush', {
         | 
| 69 | 
            +
                                               protocol: 'kernel'
         | 
| 70 | 
            +
                                             }), 'ip rule flush protocol kernel')
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
            end
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            RSpec.describe Kanrisuru::Core::IP do
         | 
| 6 | 
            +
              before(:all) do
         | 
| 7 | 
            +
                StubNetwork.stub!
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              after(:all) do
         | 
| 11 | 
            +
                StubNetwork.unstub!
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              let(:host) do
         | 
| 15 | 
            +
                Kanrisuru::Remote::Host.new(
         | 
| 16 | 
            +
                  host: 'localhost',
         | 
| 17 | 
            +
                  username: 'ubuntu',
         | 
| 18 | 
            +
                  keys: ['id_rsa']
         | 
| 19 | 
            +
                )
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              context 'with ip version' do
         | 
| 23 | 
            +
                it 'prepares ip_version command' do
         | 
| 24 | 
            +
                  expect_command(host.ip_version, 'ip -V')
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: kanrisuru
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.15.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ryan Mammina
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021-12- | 
| 11 | 
            +
            date: 2021-12-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: parallel_tests
         | 
| @@ -245,6 +245,8 @@ files: | |
| 245 245 | 
             
            - lib/kanrisuru/core/ip/commands/address.rb
         | 
| 246 246 | 
             
            - lib/kanrisuru/core/ip/commands/address_label.rb
         | 
| 247 247 | 
             
            - lib/kanrisuru/core/ip/commands/link.rb
         | 
| 248 | 
            +
            - lib/kanrisuru/core/ip/commands/link_set_opts.rb
         | 
| 249 | 
            +
            - lib/kanrisuru/core/ip/commands/link_type_opts.rb
         | 
| 248 250 | 
             
            - lib/kanrisuru/core/ip/commands/maddress.rb
         | 
| 249 251 | 
             
            - lib/kanrisuru/core/ip/commands/neighbour.rb
         | 
| 250 252 | 
             
            - lib/kanrisuru/core/ip/commands/route.rb
         | 
| @@ -259,6 +261,7 @@ files: | |
| 259 261 | 
             
            - lib/kanrisuru/core/ip/parsers/neighbour.rb
         | 
| 260 262 | 
             
            - lib/kanrisuru/core/ip/parsers/route.rb
         | 
| 261 263 | 
             
            - lib/kanrisuru/core/ip/parsers/rule.rb
         | 
| 264 | 
            +
            - lib/kanrisuru/core/ip/parsers/version.rb
         | 
| 262 265 | 
             
            - lib/kanrisuru/core/ip/types.rb
         | 
| 263 266 | 
             
            - lib/kanrisuru/core/mount.rb
         | 
| 264 267 | 
             
            - lib/kanrisuru/core/mount/commands.rb
         | 
| @@ -437,6 +440,14 @@ files: | |
| 437 440 | 
             
            - spec/functional/core/apt_spec.rb
         | 
| 438 441 | 
             
            - spec/functional/core/archive_spec.rb
         | 
| 439 442 | 
             
            - spec/functional/core/find_spec.rb
         | 
| 443 | 
            +
            - spec/functional/core/ip/ip_address_label_spec.rb
         | 
| 444 | 
            +
            - spec/functional/core/ip/ip_address_spec.rb
         | 
| 445 | 
            +
            - spec/functional/core/ip/ip_link_spec.rb
         | 
| 446 | 
            +
            - spec/functional/core/ip/ip_maddress_spec.rb
         | 
| 447 | 
            +
            - spec/functional/core/ip/ip_neighbour_spec.rb
         | 
| 448 | 
            +
            - spec/functional/core/ip/ip_route_spec.rb
         | 
| 449 | 
            +
            - spec/functional/core/ip/ip_rule_spec.rb
         | 
| 450 | 
            +
            - spec/functional/core/ip/ip_spec.rb
         | 
| 440 451 | 
             
            - spec/functional/core/mount_spec.rb
         | 
| 441 452 | 
             
            - spec/functional/core/path_spec.rb
         | 
| 442 453 | 
             
            - spec/functional/core/socket_spec.rb
         |