func (s *policySuite) TestSnapDeclAllowDenyAutoConnection(c *C) { tests := []struct { iface string expected string // "" => no error }{ {"random", ""}, {"auto-snap-plug-allow", ""}, {"auto-snap-plug-deny", `auto-connection denied by plug rule of interface "auto-snap-plug-deny" for "plug-snap" snap`}, {"auto-snap-plug-not-allow", `auto-connection not allowed by plug rule of interface "auto-snap-plug-not-allow" for "plug-snap" snap`}, {"auto-snap-slot-allow", ""}, {"auto-snap-slot-deny", `auto-connection denied by slot rule of interface "auto-snap-slot-deny" for "slot-snap" snap`}, {"auto-snap-slot-not-allow", `auto-connection not allowed by slot rule of interface "auto-snap-slot-not-allow" for "slot-snap" snap`}, {"auto-base-deny-snap-slot-allow", ""}, {"auto-base-deny-snap-plug-allow", ""}, {"auto-snap-slot-deny-snap-plug-allow", ""}, {"auto-base-allow-snap-slot-not-allow", `auto-connection not allowed.*`}, } for _, t := range tests { cand := policy.ConnectCandidate{ Plug: s.plugSnap.Plugs[t.iface], Slot: s.slotSnap.Slots[t.iface], PlugSnapDeclaration: s.plugDecl, SlotSnapDeclaration: s.slotDecl, BaseDeclaration: s.baseDecl, } err := cand.CheckAutoConnect() if t.expected == "" { c.Check(err, IsNil) } else { c.Check(err, ErrorMatches, t.expected) } } }
func (c *autoConnectChecker) check(plug *interfaces.Plug, slot *interfaces.Slot) bool { var plugDecl *asserts.SnapDeclaration if plug.Snap.SnapID != "" { var err error plugDecl, err = c.snapDeclaration(plug.Snap.SnapID) if err != nil { logger.Noticef("error: cannot find snap declaration for %q: %v", plug.Snap.Name(), err) return false } } var slotDecl *asserts.SnapDeclaration if slot.Snap.SnapID != "" { var err error slotDecl, err = c.snapDeclaration(slot.Snap.SnapID) if err != nil { logger.Noticef("error: cannot find snap declaration for %q: %v", slot.Snap.Name(), err) return false } } // check the connection against the declarations' rules ic := policy.ConnectCandidate{ Plug: plug.PlugInfo, PlugSnapDeclaration: plugDecl, Slot: slot.SlotInfo, SlotSnapDeclaration: slotDecl, BaseDeclaration: c.baseDecl, } return ic.CheckAutoConnect() == nil }
func (s *policySuite) TestBaselineDefaultIsAllow(c *C) { cand := policy.ConnectCandidate{ Plug: s.plugSnap.Plugs["random"], Slot: s.slotSnap.Slots["random"], BaseDeclaration: s.baseDecl, } c.Check(cand.Check(), IsNil) c.Check(cand.CheckAutoConnect(), IsNil) }