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  )