kanrisuru 0.14.0 → 0.16.2
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 +27 -0
- data/README.md +5 -5
- data/kanrisuru.gemspec +7 -3
- data/lib/kanrisuru/command.rb +16 -3
- data/lib/kanrisuru/core/apt/parsers/base.rb +1 -1
- data/lib/kanrisuru/core/disk/commands/lsblk.rb +6 -11
- data/lib/kanrisuru/core/disk/constants.rb +9 -0
- data/lib/kanrisuru/core/disk/parser.rb +1 -0
- data/lib/kanrisuru/core/disk/parsers/lsblk_version.rb +21 -0
- data/lib/kanrisuru/core/disk.rb +1 -0
- data/lib/kanrisuru/core/dmi/commands/dmi.rb +1 -1
- data/lib/kanrisuru/core/file/commands/chmod.rb +1 -1
- data/lib/kanrisuru/core/file/commands/copy.rb +1 -3
- data/lib/kanrisuru/core/file/commands/mkdir.rb +11 -6
- data/lib/kanrisuru/core/file/commands/rm.rb +4 -1
- data/lib/kanrisuru/core/file/commands/touch.rb +2 -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/core/system/commands/kill.rb +1 -1
- data/lib/kanrisuru/core/user/commands/create_user.rb +9 -17
- data/lib/kanrisuru/core/user/commands/delete_user.rb +1 -1
- data/lib/kanrisuru/core/user/commands/update_user.rb +14 -23
- data/lib/kanrisuru/core/zypper/commands/add_repo.rb +1 -8
- data/lib/kanrisuru/core/zypper/commands/add_service.rb +4 -2
- data/lib/kanrisuru/core/zypper/commands/info.rb +1 -2
- data/lib/kanrisuru/core/zypper/commands/install.rb +2 -3
- data/lib/kanrisuru/core/zypper/commands/modify_repo.rb +1 -7
- data/lib/kanrisuru/core/zypper/commands/modify_service.rb +3 -1
- data/lib/kanrisuru/core/zypper/commands/remove.rb +1 -2
- data/lib/kanrisuru/core/zypper/commands/remove_repo.rb +3 -3
- data/lib/kanrisuru/core/zypper/commands/remove_service.rb +6 -1
- data/lib/kanrisuru/core/zypper/commands/search.rb +1 -3
- data/lib/kanrisuru/core/zypper/commands/source_install.rb +2 -0
- data/lib/kanrisuru/core/zypper/commands.rb +10 -1
- data/lib/kanrisuru/os_package.rb +2 -0
- data/lib/kanrisuru/remote/host.rb +1 -3
- data/lib/kanrisuru/result.rb +15 -0
- data/lib/kanrisuru/version.rb +1 -1
- data/spec/functional/core/archive_spec.rb +1 -1
- data/spec/functional/core/disk_spec.rb +77 -0
- data/spec/functional/core/dmi_spec.rb +78 -0
- data/spec/functional/core/file_spec.rb +284 -0
- data/spec/functional/core/group_spec.rb +62 -0
- data/spec/functional/core/ip_address_label_spec.rb +81 -0
- data/spec/functional/core/ip_address_spec.rb +95 -0
- data/spec/functional/core/ip_link_spec.rb +814 -0
- data/spec/functional/core/ip_maddress_spec.rb +78 -0
- data/spec/functional/core/ip_neighbour_spec.rb +119 -0
- data/spec/functional/core/ip_route_spec.rb +174 -0
- data/spec/functional/core/ip_rule_spec.rb +75 -0
- data/spec/functional/core/ip_spec.rb +27 -0
- data/spec/functional/core/system_spec.rb +135 -0
- data/spec/functional/core/user_spec.rb +97 -0
- data/spec/functional/core/zypper_spec.rb +708 -0
- data/spec/functional/result_spec.rb +91 -44
- data/spec/helper/stub_network.rb +7 -3
- data/spec/support/shared_examples/integration/core/transfer.rb +1 -1
- data/spec/unit/command_spec.rb +2 -0
- data/spec/unit/core/ip_spec.rb +12 -0
- metadata +25 -4
| @@ -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
         | 
| @@ -0,0 +1,135 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            RSpec.describe Kanrisuru::Core::System 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 | 
            +
              it 'prepares cpu_info command' do
         | 
| 23 | 
            +
                expect_command(host.cpu_info('sockets'), "lscpu | grep -i '^Socket' | awk '{print $NF}'")
         | 
| 24 | 
            +
                expect_command(host.cpu_info('cores_per_socket'), "lscpu | grep -i '^Core' | awk '{print $NF}'")
         | 
| 25 | 
            +
                expect_command(host.cpu_info('threads'), "lscpu | grep -i '^Thread' | awk '{print $NF}'")
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                allow(Kanrisuru.logger).to receive(:info)
         | 
| 28 | 
            +
                expect(Kanrisuru.logger).to receive(:info) do |&block|
         | 
| 29 | 
            +
                  expect(block.call).to eq('DEPRECATION WARNING: cpu_info will be removed in the upcoming major release. Use lscpu instead.')
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                expect_command(host.cpu_info('cores'), "lscpu | grep -i '^CPU(' | awk '{print $NF}'")
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              it 'prepares free command' do
         | 
| 36 | 
            +
                expect_command(host.free('total'), "cat /proc/meminfo | grep -i '^MemTotal' | awk '{print $2}'")
         | 
| 37 | 
            +
                expect_command(host.free('free'), "cat /proc/meminfo | grep -i '^MemFree' | awk '{print $2}'")
         | 
| 38 | 
            +
                expect_command(host.free('swap'), "cat /proc/meminfo | grep -i '^SwapTotal' | awk '{print $2}'")
         | 
| 39 | 
            +
                expect_command(host.free('swap_free'), "cat /proc/meminfo | grep -i '^SwapFree' | awk '{print $2}'")
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                expect do
         | 
| 42 | 
            +
                  host.free('hello')
         | 
| 43 | 
            +
                end.to raise_error(ArgumentError)
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              it 'prepares kernel_statistics command' do
         | 
| 47 | 
            +
                expect_command(host.kernel_statistics, 'cat /proc/stat')
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              it 'prepares kill command' do
         | 
| 51 | 
            +
                expect_command(host.kill('KILL', 1024), 'kill -KILL 1024')
         | 
| 52 | 
            +
                expect_command(host.kill(1, 1024), 'kill -HUP 1024')
         | 
| 53 | 
            +
                expect_command(host.kill('TERM', [1024, 1025, 1026]), 'kill -TERM 1024 1025 1026')
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                expect do
         | 
| 56 | 
            +
                  host.kill('all', 0)
         | 
| 57 | 
            +
                end.to raise_error(ArgumentError)
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
              it 'prepares last command' do
         | 
| 61 | 
            +
                expect_command(host.last, "last -i -F | sed 's/ /  /'")
         | 
| 62 | 
            +
                expect_command(host.last({ file: '/var/log/login.log' }), "last -i -F -f /var/log/login.log | sed 's/ /  /'")
         | 
| 63 | 
            +
                expect_command(host.last({ failed_attempts: true }), "lastb -i -F | sed 's/ /  /'")
         | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
              it 'prepares load_average command' do
         | 
| 67 | 
            +
                expect_command(host.load_average, "cat /proc/loadavg | awk '{print $1,$2,$3}'")
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              it 'prepares load_env command' do
         | 
| 71 | 
            +
                expect_command(host.load_env, 'env')
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              it 'prepares lscpu command' do
         | 
| 75 | 
            +
                expect_command(host.lscpu, 'lscpu')
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              it 'prepares lsof command' do
         | 
| 79 | 
            +
                expect_command(host.lsof, 'lsof -F pcuftDsin')
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
              it 'prepares poweroff command' do
         | 
| 83 | 
            +
                expect_command(host.poweroff, 'shutdown')
         | 
| 84 | 
            +
                expect_command(host.poweroff(cancel: true), 'shutdown -c')
         | 
| 85 | 
            +
                expect_command(host.poweroff(cancel: true, message: 'canceling...'), 'shutdown -c canceling...')
         | 
| 86 | 
            +
                expect_command(host.poweroff(no_wall: true), 'shutdown --no-wall')
         | 
| 87 | 
            +
                expect_command(host.poweroff(time: 10), 'shutdown +10')
         | 
| 88 | 
            +
                expect_command(host.poweroff(time: 'now'), 'shutdown now')
         | 
| 89 | 
            +
                expect_command(host.poweroff(time: '11:11'), 'shutdown 11:11')
         | 
| 90 | 
            +
                expect_command(host.poweroff(time: '11:11', message: 'turning off'), 'shutdown 11:11 turning off')
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                expect do
         | 
| 93 | 
            +
                  host.poweroff(time: 'hsadf')
         | 
| 94 | 
            +
                end.to raise_error(ArgumentError)
         | 
| 95 | 
            +
              end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
              it 'prepares ps command' do
         | 
| 98 | 
            +
                expect_command(host.ps,
         | 
| 99 | 
            +
                               'ps ww ax -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
         | 
| 100 | 
            +
                expect_command(host.ps(user: '1000', group: '1000'),
         | 
| 101 | 
            +
                               'ps ww --user 1000 --group 1000 -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
         | 
| 102 | 
            +
                expect_command(host.ps(user: [0, 1000], group: [0, 1000]),
         | 
| 103 | 
            +
                               'ps ww --user 0,1000 --group 0,1000 -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
         | 
| 104 | 
            +
                expect_command(host.ps(pid: 100),
         | 
| 105 | 
            +
                               'ps ww --pid 100 -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
         | 
| 106 | 
            +
                expect_command(host.ps(pid: [100, 101, 102]),
         | 
| 107 | 
            +
                               'ps ww --pid 100,101,102 -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
         | 
| 108 | 
            +
                expect_command(host.ps(pid: [100, 101, 102], ppid: [0, 3, 5]),
         | 
| 109 | 
            +
                               'ps ww --pid 100,101,102 --ppid 0,3,5 -o uid,user,gid,group,ppid,pid,pcpu,pmem,stat,pri,flags,policy,time,cmd --no-headers')
         | 
| 110 | 
            +
              end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
              it 'prepares reboot command' do
         | 
| 113 | 
            +
                expect_command(host.reboot, 'shutdown -r')
         | 
| 114 | 
            +
                expect_command(host.reboot(cancel: true), 'shutdown -c')
         | 
| 115 | 
            +
                expect_command(host.reboot(cancel: true, message: 'canceling...'), 'shutdown -c canceling...')
         | 
| 116 | 
            +
                expect_command(host.reboot(no_wall: true), 'shutdown -r --no-wall')
         | 
| 117 | 
            +
                expect_command(host.reboot(time: 10), 'shutdown -r +10')
         | 
| 118 | 
            +
                expect_command(host.reboot(time: 'now'), 'shutdown -r now')
         | 
| 119 | 
            +
                expect_command(host.reboot(time: '11:11'), 'shutdown -r 11:11')
         | 
| 120 | 
            +
                expect_command(host.reboot(time: '11:11', message: 'turning off'), 'shutdown -r 11:11 turning off')
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                expect do
         | 
| 123 | 
            +
                  host.reboot(time: 'hsadf')
         | 
| 124 | 
            +
                end.to raise_error(ArgumentError)
         | 
| 125 | 
            +
              end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
              it 'prepares uptime command' do
         | 
| 128 | 
            +
                expect_command(host.uptime, 'cat /proc/uptime')
         | 
| 129 | 
            +
              end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
              it 'prepares w command' do
         | 
| 132 | 
            +
                expect_command(host.w, 'w -hi')
         | 
| 133 | 
            +
                expect_command(host.who(users: 'centos'), 'w -hi centos')
         | 
| 134 | 
            +
              end
         | 
| 135 | 
            +
            end
         |