github.com/stolowski/snapd@v0.0.0-20210407085831-115137ce5a22/daemon/export_test.go (about) 1 // -*- Mode: Go; indent-tabs-mode: t -*- 2 3 /* 4 * Copyright (C) 2018-2020 Canonical Ltd 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 3 as 8 * published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 * 18 */ 19 20 package daemon 21 22 import ( 23 "context" 24 "net/http" 25 "time" 26 27 "github.com/gorilla/mux" 28 29 "github.com/snapcore/snapd/overlord" 30 "github.com/snapcore/snapd/overlord/snapstate" 31 "github.com/snapcore/snapd/overlord/state" 32 "github.com/snapcore/snapd/snap" 33 ) 34 35 func APICommands() []*Command { 36 return api 37 } 38 39 func NewAndAddRoutes() (*Daemon, error) { 40 d, err := New() 41 if err != nil { 42 return nil, err 43 } 44 d.addRoutes() 45 return d, nil 46 } 47 48 func NewWithOverlord(o *overlord.Overlord) *Daemon { 49 d := &Daemon{overlord: o, state: o.State()} 50 d.addRoutes() 51 return d 52 } 53 54 func (d *Daemon) RouterMatch(req *http.Request, m *mux.RouteMatch) bool { 55 return d.router.Match(req, m) 56 } 57 58 func (d *Daemon) Overlord() *overlord.Overlord { 59 return d.overlord 60 } 61 62 func (d *Daemon) RequestedRestart() state.RestartType { 63 return d.requestedRestart 64 } 65 66 func MockUcrednetGet(mock func(remoteAddr string) (pid int32, uid uint32, socket string, err error)) (restore func()) { 67 oldUcrednetGet := ucrednetGet 68 ucrednetGet = mock 69 return func() { 70 ucrednetGet = oldUcrednetGet 71 } 72 } 73 74 func MockEnsureStateSoon(mock func(*state.State)) (original func(*state.State), restore func()) { 75 oldEnsureStateSoon := ensureStateSoon 76 ensureStateSoon = mock 77 return ensureStateSoonImpl, func() { 78 ensureStateSoon = oldEnsureStateSoon 79 } 80 } 81 82 func MockMuxVars(vars func(*http.Request) map[string]string) (restore func()) { 83 old := muxVars 84 muxVars = vars 85 return func() { 86 muxVars = old 87 } 88 } 89 90 func MockShutdownTimeout(tm time.Duration) (restore func()) { 91 old := shutdownTimeout 92 shutdownTimeout = tm 93 return func() { 94 shutdownTimeout = old 95 } 96 } 97 98 func MockUnsafeReadSnapInfo(mock func(string) (*snap.Info, error)) (restore func()) { 99 oldUnsafeReadSnapInfo := unsafeReadSnapInfo 100 unsafeReadSnapInfo = mock 101 return func() { 102 unsafeReadSnapInfo = oldUnsafeReadSnapInfo 103 } 104 } 105 106 func MockAssertstateRefreshSnapDeclarations(mock func(*state.State, int) error) (restore func()) { 107 oldAssertstateRefreshSnapDeclarations := assertstateRefreshSnapDeclarations 108 assertstateRefreshSnapDeclarations = mock 109 return func() { 110 assertstateRefreshSnapDeclarations = oldAssertstateRefreshSnapDeclarations 111 } 112 } 113 114 func MockSnapstateInstall(mock func(context.Context, *state.State, string, *snapstate.RevisionOptions, int, snapstate.Flags) (*state.TaskSet, error)) (restore func()) { 115 oldSnapstateInstall := snapstateInstall 116 snapstateInstall = mock 117 return func() { 118 snapstateInstall = oldSnapstateInstall 119 } 120 } 121 122 func MockSnapstateInstallPath(mock func(*state.State, *snap.SideInfo, string, string, string, snapstate.Flags) (*state.TaskSet, *snap.Info, error)) (restore func()) { 123 oldSnapstateInstallPath := snapstateInstallPath 124 snapstateInstallPath = mock 125 return func() { 126 snapstateInstallPath = oldSnapstateInstallPath 127 } 128 } 129 130 func MockSnapstateUpdate(mock func(*state.State, string, *snapstate.RevisionOptions, int, snapstate.Flags) (*state.TaskSet, error)) (restore func()) { 131 oldSnapstateUpdate := snapstateUpdate 132 snapstateUpdate = mock 133 return func() { 134 snapstateUpdate = oldSnapstateUpdate 135 } 136 } 137 138 func MockSnapstateTryPath(mock func(*state.State, string, string, snapstate.Flags) (*state.TaskSet, error)) (restore func()) { 139 oldSnapstateTryPath := snapstateTryPath 140 snapstateTryPath = mock 141 return func() { 142 snapstateTryPath = oldSnapstateTryPath 143 } 144 } 145 146 func MockSnapstateSwitch(mock func(*state.State, string, *snapstate.RevisionOptions) (*state.TaskSet, error)) (restore func()) { 147 oldSnapstateSwitch := snapstateSwitch 148 snapstateSwitch = mock 149 return func() { 150 snapstateSwitch = oldSnapstateSwitch 151 } 152 } 153 154 func MockSnapstateRevert(mock func(*state.State, string, snapstate.Flags) (*state.TaskSet, error)) (restore func()) { 155 oldSnapstateRevert := snapstateRevert 156 snapstateRevert = mock 157 return func() { 158 snapstateRevert = oldSnapstateRevert 159 } 160 } 161 162 func MockSnapstateRevertToRevision(mock func(*state.State, string, snap.Revision, snapstate.Flags) (*state.TaskSet, error)) (restore func()) { 163 oldSnapstateRevertToRevision := snapstateRevertToRevision 164 snapstateRevertToRevision = mock 165 return func() { 166 snapstateRevertToRevision = oldSnapstateRevertToRevision 167 } 168 } 169 170 func MockSnapstateInstallMany(mock func(*state.State, []string, int) ([]string, []*state.TaskSet, error)) (restore func()) { 171 oldSnapstateInstallMany := snapstateInstallMany 172 snapstateInstallMany = mock 173 return func() { 174 snapstateInstallMany = oldSnapstateInstallMany 175 } 176 } 177 178 func MockSnapstateUpdateMany(mock func(context.Context, *state.State, []string, int, *snapstate.Flags) ([]string, []*state.TaskSet, error)) (restore func()) { 179 oldSnapstateUpdateMany := snapstateUpdateMany 180 snapstateUpdateMany = mock 181 return func() { 182 snapstateUpdateMany = oldSnapstateUpdateMany 183 } 184 } 185 186 func MockSnapstateRemoveMany(mock func(*state.State, []string) ([]string, []*state.TaskSet, error)) (restore func()) { 187 oldSnapstateRemoveMany := snapstateRemoveMany 188 snapstateRemoveMany = mock 189 return func() { 190 snapstateRemoveMany = oldSnapstateRemoveMany 191 } 192 } 193 194 type ( 195 Resp = resp 196 RespJSON = respJSON 197 FileResponse = fileResponse 198 ErrorResult = errorResult 199 SnapInstruction = snapInstruction 200 ) 201 202 // XXX this is not used very consistently 203 func (rsp *resp) ErrorResult() *errorResult { 204 return rsp.Result.(*errorResult) 205 } 206 207 func (inst *snapInstruction) Dispatch() snapActionFunc { 208 return inst.dispatch() 209 } 210 211 func (inst *snapInstruction) DispatchForMany() snapManyActionFunc { 212 return inst.dispatchForMany() 213 } 214 215 func (inst *snapInstruction) SetUserID(userID int) { 216 inst.userID = userID 217 } 218 219 func (inst *snapInstruction) ModeFlags() (snapstate.Flags, error) { 220 return inst.modeFlags() 221 } 222 223 func (inst *snapInstruction) ErrToResponse(err error) Response { 224 return inst.errToResponse(err) 225 } 226 227 var ( 228 UserFromRequest = userFromRequest 229 IsTrue = isTrue 230 231 MakeErrorResponder = makeErrorResponder 232 ErrToResponse = errToResponse 233 )