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  )