File: app_set.go

package info (click to toggle)
snapd 2.72-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 80,412 kB
  • sloc: sh: 16,506; ansic: 16,211; python: 11,213; makefile: 1,919; exp: 190; awk: 58; xml: 22
file content (109 lines) | stat: -rw-r--r-- 3,826 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package ifacetest

import (
	"fmt"

	"github.com/snapcore/snapd/interfaces"
	"github.com/snapcore/snapd/snap"
	"github.com/snapcore/snapd/snap/snaptest"
	"gopkg.in/check.v1"
)

func MockInfoAndAppSet(c *check.C, yamlText string, componentYamls []string, sideInfo *snap.SideInfo) *interfaces.SnapAppSet {
	info := snaptest.MockInfo(c, yamlText, sideInfo)
	return mockAppSet(c, componentYamls, info)
}

func MockInstanceAndAppSet(c *check.C, instanceName string, yamlText string, componentYamls []string, sideInfo *snap.SideInfo) *interfaces.SnapAppSet {
	info := snaptest.MockSnapInstance(c, instanceName, yamlText, sideInfo)
	return mockAppSet(c, componentYamls, info)
}

func MockSnapAndAppSet(c *check.C, yamlText string, componentYamls []string, sideInfo *snap.SideInfo) *interfaces.SnapAppSet {
	info := snaptest.MockSnap(c, yamlText, sideInfo)
	return mockAppSet(c, componentYamls, info)
}

func mockAppSet(c *check.C, componentYamls []string, info *snap.Info) *interfaces.SnapAppSet {
	components := make([]*snap.ComponentInfo, 0, len(componentYamls))
	for _, yaml := range componentYamls {
		components = append(components, snaptest.MockComponent(c, yaml, info, snap.ComponentSideInfo{
			Revision: snap.R(1),
		}))
	}

	set, err := interfaces.NewSnapAppSet(info, components)
	c.Assert(err, check.IsNil)

	return set
}

func MockProviderYaml(snapName, plugName string) string {
	const template = `name: %s
version: 1
plugs:
 %[2]s:
  interface: %[2]s
`
	return fmt.Sprintf(template, snapName, plugName)
}

func MockConnectedPlug(c *check.C, yaml string, si *snap.SideInfo, plugName string) (*interfaces.ConnectedPlug, *snap.PlugInfo) {
	return MockConnectedPlugWithAttrs(c, yaml, si, plugName, nil, nil)
}

func MockConnectedSlot(c *check.C, yaml string, si *snap.SideInfo, slotName string) (*interfaces.ConnectedSlot, *snap.SlotInfo) {
	return MockConnectedSlotWithAttrs(c, yaml, si, slotName, nil, nil)
}

func MockConnectedSlotWithComponents(c *check.C, yaml string, si *snap.SideInfo, compYamls []string, slotName string) (*interfaces.ConnectedSlot, *snap.SlotInfo) {
	set := MockInfoAndAppSet(c, yaml, compYamls, si)
	info := set.Info()

	slotInfo, ok := info.Slots[slotName]
	if !ok {
		c.Fatalf("cannot find slot %q in snap %q", slotName, info.InstanceName())
	}

	return interfaces.NewConnectedSlot(slotInfo, set, nil, nil), slotInfo
}

func MockConnectedPlugWithComponents(c *check.C, yaml string, si *snap.SideInfo, compYamls []string, plugName string) (*interfaces.ConnectedPlug, *snap.PlugInfo) {
	set := MockInfoAndAppSet(c, yaml, compYamls, si)
	info := set.Info()

	plugInfo, ok := info.Plugs[plugName]
	if !ok {
		c.Fatalf("cannot find plug %q in snap %q", plugName, info.InstanceName())
	}

	return interfaces.NewConnectedPlug(plugInfo, set, nil, nil), plugInfo
}

func MockConnectedSlotWithAttrs(c *check.C, yaml string, si *snap.SideInfo, slotName string, staticAttrs, dynamicAttrs map[string]any) (*interfaces.ConnectedSlot, *snap.SlotInfo) {
	info := snaptest.MockInfo(c, yaml, si)

	set, err := interfaces.NewSnapAppSet(info, nil)
	c.Assert(err, check.IsNil)

	slotInfo, ok := info.Slots[slotName]
	if !ok {
		c.Fatalf("cannot find slot %q in snap %q", slotName, info.InstanceName())
	}

	return interfaces.NewConnectedSlot(slotInfo, set, staticAttrs, dynamicAttrs), slotInfo
}

func MockConnectedPlugWithAttrs(c *check.C, yaml string, si *snap.SideInfo, plugName string, staticAttrs, dynamicAttrs map[string]any) (*interfaces.ConnectedPlug, *snap.PlugInfo) {
	info := snaptest.MockInfo(c, yaml, si)

	set, err := interfaces.NewSnapAppSet(info, nil)
	c.Assert(err, check.IsNil)

	plugInfo, ok := info.Plugs[plugName]
	if !ok {
		c.Fatalf("cannot find plug %q in snap %q", plugName, info.InstanceName())
	}

	return interfaces.NewConnectedPlug(plugInfo, set, staticAttrs, dynamicAttrs), plugInfo
}