def invoked(self, ctx): """Test install of test-snapd-tools snap.""" print('Install {}...'.format(TEST_SNAP)) s = Snapd(SNAPD_TASK_TIMEOUT, SNAPD_POLL_INTERVAL) s.install(TEST_SNAP, ctx.args.channel) print('Confirm in snap list...') data = s.list() for snap in data: if snap['name'] == TEST_SNAP: return 0 print(' not in snap list') return 1
def invoked(self): """Test remove of test-snapd-tools snap.""" print('Install {}...'.format(TEST_SNAP)) s = Snapd(SNAPD_TASK_TIMEOUT, SNAPD_POLL_INTERVAL) s.remove(TEST_SNAP) print('Check not in snap list') data = s.list() for snap in data: if snap['name'] == TEST_SNAP: print(' found in snap list') return 1 return 0
def invoked(self): """Test install of test-snapd-tools snap.""" parser = argparse.ArgumentParser() parser.add_argument('channel', help='channel to install from') args = parser.parse_args(sys.argv[2:]) print('Install {}...'.format(TEST_SNAP)) s = Snapd(SNAPD_TASK_TIMEOUT, SNAPD_POLL_INTERVAL, verbose=True) s.install(TEST_SNAP, args.channel) print('Confirm in snap list...') data = s.list() for snap in data: if snap['name'] == TEST_SNAP: return 0 print(' not in snap list') return 1
def get_gadget_snap(): model = next(decode(Snapd().get_assertions('model')), None) if model: # convert to resource to handle presence of track info resource = model_to_resource(model) return resource.get('gadget') return None
def main(): parser = argparse.ArgumentParser() parser.add_argument('connections', nargs='+', default=[], metavar='plug:target_snap:target_slot') args = parser.parse_args() for conn in [spec.split(':') for spec in args.connections]: if len(conn) != 3: raise SystemExit("Bad connection description") assert os.environ['SNAP_NAME'] snap = os.environ['SNAP_NAME'] existing_connections = get_connections() new_connection = Connection(target_snap=conn[1], target_slot=conn[2], plug_snap=snap, plug_plug=conn[0]) if new_connection not in existing_connections: try: # increase timeout to ensure slow devices (caracalla) can # complete their snap connect jobs Snapd(task_timeout=60).connect(*new_connection) except requests.HTTPError as exc: logging.warning("Failed to connect %s to %s. %s" % (conn[0], conn[1], exc))
def invoked(self): """snap list should show the core package is installed.""" data = Snapd().list() for snap in data: if snap['name'] in ('core', 'core16', 'core18'): print("Found a core snap") print(snap['name'], snap['version'], snap['revision']) return 0 return 1
def invoked(self): count = http_to_resource(Snapd().get_assertions('serial')) if count == 0: # Print a dummy assertion - not nice but really trick to use # plainbox resources without some defualt value print('type: serial') print('authority-id: None') print('serial: None') print()
def __init__(self): self.kernel = None self.gadget = None data = Snapd().list() for snap in data: if snap['type'] == 'kernel': self.kernel = snap if snap['type'] == 'gadget': self.gadget = snap
def invoked(self): """snap search for TEST_SNAP.""" data = Snapd().find(TEST_SNAP, ) for snap in data: print('ID:', snap['id']) print('Name:', snap['name']) print('Developer:', snap['developer']) return 0 return 1
def __init__(self): self.authority = None self.brand = None for line in io.StringIO(Snapd().get_assertions('model').text): if ':' in line: entry = line.split(':', maxsplit=1) if entry[0] == 'authority-id': self.authority = entry[1].strip() if entry[0] == 'brand-id': self.brand = entry[1].strip()
def invoked(self): """Test refresh of test-snapd-tools snap.""" def get_rev(): data = Snapd().list() for snap in data: if snap['name'] == TEST_SNAP: return snap['revision'] print('Get starting revision...') start_rev = get_rev() print(' revision:', start_rev) print('Refresh to edge...') s = Snapd(SNAPD_TASK_TIMEOUT, SNAPD_POLL_INTERVAL) s.refresh(TEST_SNAP, 'edge') print('Get new revision...') new_rev = get_rev() print(' revision:', new_rev) if new_rev == start_rev: return 1 return 0
def get_connections(): data = Snapd().interfaces() connections = [] if 'plugs' in data: for plug in data['plugs']: if 'connections' in plug: for con in plug['connections']: connections.append( Connection(con['snap'], con['slot'], plug['snap'], plug['plug'])) return connections
def invoked(self): """Test re-update of test-snapd-tools snap.""" s = Snapd(SNAPD_TASK_TIMEOUT, SNAPD_POLL_INTERVAL) print('Get edge channel revision from store...') r = s.info(TEST_SNAP) edge_rev = r['channels']['latest/edge']['revision'] print('Remove edge revision...') s.remove(TEST_SNAP, edge_rev) print('Refresh to edge channel...') s.refresh(TEST_SNAP, 'edge') print('Get new installed revision...') r = s.list(TEST_SNAP) rev = r['revision'] if rev != edge_rev: print("Not edge revision number") return 1
def invoked(self): data = Snapd().list() for snap in data: def print_field(key): try: val = snap[key] except KeyError: val = "" if val != "": print("{}: {}".format(key, val)) # Whitelist of information that is of interest keys = [ 'name', 'type', 'channel', 'version', 'revision', 'developer', 'install-date', 'confinement', 'devmode', 'status' ] for f in keys: print_field(f) print()
def invoked(self): data = Snapd().interfaces() if 'plugs' in data: for plug in data['plugs']: def print_field(key): val = plug[key] if val != '': print('{}: {}'.format(key, val)) keys = ['snap', 'interface'] for f in keys: print_field(f) print('type: plug') print('name: {}'.format(plug['plug'])) if 'attrs' in plug: for attr, val in plug['attrs'].items(): print('attr_{}: {}'.format(slugify(attr), val)) print() if 'slots' in data: for slot in data['slots']: def print_field(key): val = slot[key] if val != '': print('{}: {}'.format(key, val)) keys = ['snap', 'interface'] for f in keys: print_field(f) print('type: slot') print('name: {}'.format(slot['slot'])) if 'attrs' in slot: for attr, val in slot['attrs'].items(): print('attr_{}: {}'.format(slugify(attr), val)) print()
def invoked(self): """Test revert of test-snapd-tools snap.""" s = Snapd(SNAPD_TASK_TIMEOUT, SNAPD_POLL_INTERVAL) print('Get stable channel revision from store...') r = s.info(TEST_SNAP) stable_rev = r['channels']['latest/stable']['revision'] print('Get current installed revision...') r = s.list(TEST_SNAP) installed_rev = r['revision'] # should be edge revision print('Reverting snap {}...'.format(TEST_SNAP)) s.revert(TEST_SNAP) print('Get new installed revision...') r = s.list(TEST_SNAP) rev = r['revision'] if rev != stable_rev: print("Not stable revision number") return 1 if rev == installed_rev: print("Identical revision number") return 1 return 0
def main(): data = Snapd().get_system_info() confinement = data["confinement"] if confinement == "strict": print("Test PASS") return 0 sandbox_features = data["sandbox-features"] sandbox_features_output = ( "\nOUTPUT: confinement: {}\nOUTPUT: sandbox-features:\n{}".format( confinement, json.dumps(sandbox_features, indent=2))) missing_features = [] if "apparmor" not in sandbox_features: logging.error("Cannot find 'apparmor' in sandbox-features") else: for feature in features_should_include: if feature not in sandbox_features["apparmor"]: missing_features.append(feature) if missing_features: logging.error("Cannot find '{}' in apparmor".format(missing_features)) categories_to_check = ["mount", "udev"] for category in categories_to_check: if category not in sandbox_features: logging.error( "Cannot find '{}' in sandbox-features".format(category)) break for feature in sandbox_features[category]: if "cgroup-v2" in feature: logging.error("cgroup({}) must NOT be v2".format(feature)) return sandbox_features_output
#!/usr/bin/env python3 # Copyright 2019 Canonical Ltd. # All rights reserved. # # Written by: # Authors: Jonathan Cave <*****@*****.**> import sys from checkbox_support.snap_utils.snapd import Snapd if __name__ == "__main__": if len(sys.argv) < 3: raise SystemExit('Usage: plug_connected_test.py SNAP PLUG') snap_name = sys.argv[1] plug_name = sys.argv[2] data = Snapd().interfaces() for plug in data.get('plugs', []): if plug['snap'] == snap_name and plug['plug'] == plug_name: if 'connections' in plug: print('{}:{} is connected to:'.format(plug['snap'], plug['plug'])) for slot in plug['connections']: print('{}:{}'.format(slot['snap'], slot['slot'])) else: raise SystemExit('ERROR: {}:{} is not connected'.format( plug['snap'], plug['plug']))
def get_rev(): data = Snapd().list() for snap in data: if snap['name'] == TEST_SNAP: return snap['revision']