Merge branch '18631-shell-login-sync'
[arvados-formula.git] / test / integration / share / libraries / system.rb
1 # frozen_string_literal: true
2
3 # system.rb -- InSpec resources for system values
4 # Author: Daniel Dehennin <daniel.dehennin@ac-dijon.fr>
5 # Copyright (C) 2020 Daniel Dehennin <daniel.dehennin@ac-dijon.fr>
6
7 class SystemResource < Inspec.resource(1)
8   name 'system'
9
10   attr_reader :platform
11
12   def initialize
13     super
14     @platform = build_platform
15   end
16
17   private
18
19   def build_platform
20     {
21       family: build_platform_family,
22       name: build_platform_name,
23       release: build_platform_release,
24       finger: build_platform_finger
25     }
26   end
27
28   def build_platform_family
29     case inspec.platform[:name]
30     when 'arch', 'gentoo'
31       inspec.platform[:name]
32     else
33       inspec.platform[:family]
34     end
35   end
36
37   def build_platform_name
38     case inspec.platform[:name]
39     when 'amazon', 'oracle'
40       "#{inspec.platform[:name]}linux"
41     when /^windows_/
42       inspec.platform[:family]
43     else
44       inspec.platform[:name]
45     end
46   end
47
48   # rubocop:disable Metrics/MethodLength,Metrics/AbcSize,Metrics/CyclomaticComplexity
49   def build_platform_release
50     case inspec.platform[:name]
51     when 'amazon'
52       # `2018` relase is named `1` in kitchen.yaml
53       inspec.platform[:release].gsub(/2018.*/, '1')
54     when 'arch'
55       'base-latest'
56     when 'gentoo'
57       "#{inspec.platform[:release].split('.')[0]}-#{derive_gentoo_init_system}"
58     when 'opensuse'
59       # rubocop:disable Style/NumericLiterals,Layout/LineLength
60       inspec.platform[:release].to_i > 20210101 ? 'tumbleweed' : inspec.platform[:release]
61       # rubocop:enable Style/NumericLiterals,Layout/LineLength
62     when 'windows_8.1_pro'
63       '8.1'
64     when 'windows_server_2019_datacenter'
65       '2019-server'
66     when 'windows_server_2016_datacenter'
67       '2016-server'
68     else
69       inspec.platform[:release]
70     end
71   end
72   # rubocop:enable Metrics/MethodLength,Metrics/AbcSize,Metrics/CyclomaticComplexity
73
74   def derive_gentoo_init_system
75     inspec.command('systemctl').exist? ? 'sysd' : 'sysv'
76   end
77
78   def build_platform_finger
79     "#{build_platform_name}-#{build_finger_release}"
80   end
81
82   def build_finger_release
83     case inspec.platform[:name]
84     when 'ubuntu'
85       build_platform_release.split('.').slice(0, 2).join('.')
86     else
87       build_platform_release.split('.')[0]
88     end
89   end
90 end