github.com/anonymouse64/snapd@v0.0.0-20210824153203-04c4c42d842d/daemon/export_test.go (about) 1 // -*- Mode: Go; indent-tabs-mode: t -*- 2 3 /* 4 * Copyright (C) 2018-2021 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 type Ucrednet = ucrednet 67 68 func MockUcrednetGet(mock func(remoteAddr string) (ucred *Ucrednet, err error)) (restore func()) { 69 oldUcrednetGet := ucrednetGet 70 ucrednetGet = mock 71 return func() { 72 ucrednetGet = oldUcrednetGet 73 } 74 } 75 76 func MockEnsureStateSoon(mock func(*state.State)) (original func(*state.State), restore func()) { 77 oldEnsureStateSoon := ensureStateSoon 78 ensureStateSoon = mock 79 return ensureStateSoonImpl, func() { 80 ensureStateSoon = oldEnsureStateSoon 81 } 82 } 83 84 func MockMuxVars(vars func(*http.Request) map[string]string) (restore func()) { 85 old := muxVars 86 muxVars = vars 87 return func() { 88 muxVars = old 89 } 90 } 91 92 func MockShutdownTimeout(tm time.Duration) (restore func()) { 93 old := shutdownTimeout 94 shutdownTimeout = tm 95 return func() { 96 shutdownTimeout = old 97 } 98 } 99 100 func MockUnsafeReadSnapInfo(mock func(string) (*snap.Info, error)) (restore func()) { 101 oldUnsafeReadSnapInfo := unsafeReadSnapInfo 102 unsafeReadSnapInfo = mock 103 return func() { 104 unsafeReadSnapInfo = oldUnsafeReadSnapInfo 105 } 106 } 107 108 func MockAssertstateRefreshSnapDeclarations(mock func(*state.State, int) error) (restore func()) { 109 oldAssertstateRefreshSnapDeclarations := assertstateRefreshSnapDeclarations 110 assertstateRefreshSnapDeclarations = mock 111 return func() { 112 assertstateRefreshSnapDeclarations = oldAssertstateRefreshSnapDeclarations 113 } 114 } 115 116 func MockSnapstateInstall(mock func(context.Context, *state.State, string, *snapstate.RevisionOptions, int, snapstate.Flags) (*state.TaskSet, error)) (restore func()) { 117 oldSnapstateInstall := snapstateInstall 118 snapstateInstall = mock 119 return func() { 120 snapstateInstall = oldSnapstateInstall 121 } 122 } 123 124 func MockSnapstateInstallPath(mock func(*state.State, *snap.SideInfo, string, string, string, snapstate.Flags) (*state.TaskSet, *snap.Info, error)) (restore func()) { 125 oldSnapstateInstallPath := snapstateInstallPath 126 snapstateInstallPath = mock 127 return func() { 128 snapstateInstallPath = oldSnapstateInstallPath 129 } 130 } 131 132 func MockSnapstateUpdate(mock func(*state.State, string, *snapstate.RevisionOptions, int, snapstate.Flags) (*state.TaskSet, error)) (restore func()) { 133 oldSnapstateUpdate := snapstateUpdate 134 snapstateUpdate = mock 135 return func() { 136 snapstateUpdate = oldSnapstateUpdate 137 } 138 } 139 140 func MockSnapstateTryPath(mock func(*state.State, string, string, snapstate.Flags) (*state.TaskSet, error)) (restore func()) { 141 oldSnapstateTryPath := snapstateTryPath 142 snapstateTryPath = mock 143 return func() { 144 snapstateTryPath = oldSnapstateTryPath 145 } 146 } 147 148 func MockSnapstateSwitch(mock func(*state.State, string, *snapstate.RevisionOptions) (*state.TaskSet, error)) (restore func()) { 149 oldSnapstateSwitch := snapstateSwitch 150 snapstateSwitch = mock 151 return func() { 152 snapstateSwitch = oldSnapstateSwitch 153 } 154 } 155 156 func MockSnapstateRevert(mock func(*state.State, string, snapstate.Flags) (*state.TaskSet, error)) (restore func()) { 157 oldSnapstateRevert := snapstateRevert 158 snapstateRevert = mock 159 return func() { 160 snapstateRevert = oldSnapstateRevert 161 } 162 } 163 164 func MockSnapstateRevertToRevision(mock func(*state.State, string, snap.Revision, snapstate.Flags) (*state.TaskSet, error)) (restore func()) { 165 oldSnapstateRevertToRevision := snapstateRevertToRevision 166 snapstateRevertToRevision = mock 167 return func() { 168 snapstateRevertToRevision = oldSnapstateRevertToRevision 169 } 170 } 171 172 func MockSnapstateInstallMany(mock func(*state.State, []string, int) ([]string, []*state.TaskSet, error)) (restore func()) { 173 oldSnapstateInstallMany := snapstateInstallMany 174 snapstateInstallMany = mock 175 return func() { 176 snapstateInstallMany = oldSnapstateInstallMany 177 } 178 } 179 180 func MockSnapstateUpdateMany(mock func(context.Context, *state.State, []string, int, *snapstate.Flags) ([]string, []*state.TaskSet, error)) (restore func()) { 181 oldSnapstateUpdateMany := snapstateUpdateMany 182 snapstateUpdateMany = mock 183 return func() { 184 snapstateUpdateMany = oldSnapstateUpdateMany 185 } 186 } 187 188 func MockSnapstateRemoveMany(mock func(*state.State, []string) ([]string, []*state.TaskSet, error)) (restore func()) { 189 oldSnapstateRemoveMany := snapstateRemoveMany 190 snapstateRemoveMany = mock 191 return func() { 192 snapstateRemoveMany = oldSnapstateRemoveMany 193 } 194 } 195 196 type ( 197 RespJSON = respJSON 198 FileResponse = fileResponse 199 APIError = apiError 200 ErrorResult = errorResult 201 SnapInstruction = snapInstruction 202 ) 203 204 func (inst *snapInstruction) Dispatch() snapActionFunc { 205 return inst.dispatch() 206 } 207 208 func (inst *snapInstruction) DispatchForMany() snapManyActionFunc { 209 return inst.dispatchForMany() 210 } 211 212 func (inst *snapInstruction) SetUserID(userID int) { 213 inst.userID = userID 214 } 215 216 func (inst *snapInstruction) ModeFlags() (snapstate.Flags, error) { 217 return inst.modeFlags() 218 } 219 220 func (inst *snapInstruction) ErrToResponse(err error) *APIError { 221 return inst.errToResponse(err) 222 } 223 224 var ( 225 UserFromRequest = userFromRequest 226 IsTrue = isTrue 227 228 MakeErrorResponder = makeErrorResponder 229 ErrToResponse = errToResponse 230 )