コード例 #1
0
 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
コード例 #2
0
 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
コード例 #3
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
コード例 #4
0
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
コード例 #5
0
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))
コード例 #6
0
 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
コード例 #7
0
 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()
コード例 #8
0
 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
コード例 #9
0
 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
コード例 #10
0
 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()
コード例 #11
0
    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
コード例 #12
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
コード例 #13
0
 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
コード例 #14
0
    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()
コード例 #15
0
    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()
コード例 #16
0
 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
コード例 #17
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
コード例 #18
0
#!/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']))
コード例 #19
0
 def get_rev():
     data = Snapd().list()
     for snap in data:
         if snap['name'] == TEST_SNAP:
             return snap['revision']