image_test/configuration/linux/freebsd.py (58 lines of code) (raw):

#!/usr/bin/env python3 # Copyright 2018 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import generic_distro import utils class FreeBSDTests(generic_distro.GenericDistroTests): def TestPackageInstallation(self): utils.Execute(['pkg', 'install', '--force', '--yes', 'tree']) def IsPackageInstalled(self, package_name): # the following command returns zero if package is installed command = ['pkg', 'query', '%n', package_name] rc, output = utils.Execute(command, raise_errors=False) return rc == 0 def GetCmdlineConfigs(self): return { 'console': ['vidconsole', ], # 'comconsole_speed': ['38400', ] } def GetCmdlineLocation(self): return '/boot/loader.conf' def GetSshdConfig(self): # Don't check for PermitRootLogin and PasswordAuthentication as it # fallbacks on FreeBSD to "no" when undefined return {} def TestRootPasswordDisabled(self): """ Ensure root password is disabled (/etc/passwd) """ # It's actually empty and it's fine according to: # https://forums.freebsd.org/threads/jails-default-root-password-is-empty-not-starred-out.37701/ utils.Execute(['grep', '^root::', '/etc/master.passwd']) def TestPackageManagerConfig(self): """ BSD has all GCE packages officially on its mirror """ pass def TestNetworkInterfaceMTU(self): """ Ensure that the network interface MTU is set to 1460. """ # Parsing from ifconfig as BSD has no sysfs rc, output = utils.Execute(['ifconfig'], capture_output=True) for line in output.split('\n'): token = 'mtu ' token_pos = line.find(token) if token_pos >= 0: desired_mtu = 1460 cur_mtu = int(line[token_pos + len(token):]) if cur_mtu != desired_mtu: raise Exception('Network MTU is %d but expected %d' % ( cur_mtu, desired_mtu)) def TestAutomaticSecurityUpdates(self): def HasFoundConfig(config_file, key, value): """ Return True if @value is found inside of a @key line on @config_file. """ command = ['grep', key, config_file] rc, output = utils.Execute(command, capture_output=True) output_lines = output.split('\n') useful_lines = filter(generic_distro.RemoveCommentAndStrip, output_lines) for line in useful_lines: if line.find(value) >= 0: # found desired value return True return False config_file = '/etc/freebsd-update.conf' desired_configs = { 'Components': 'kernel', } for key in desired_configs: if not HasFoundConfig(config_file, key, desired_configs[key]): raise Exception('freebsd-update "%s" config has no "%s" on it' % ( key, desired_configs[key])) def GetSysctlConfigs(self): """ Return BSD parameters for sysctl checks. Below is what I could find on BSD related to original Linux's requirements. """ return { 'net.inet.ip.forwarding': 0, 'net.inet.tcp.syncookies': 1, 'net.inet.ip.accept_sourceroute': 0, 'net.inet.ip.redirect': 0, 'net.inet.icmp.bmcastecho': 0, }