1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-08-04 20:48:29 -04:00

Compare commits

..

7 Commits

Author SHA1 Message Date
purian23 8d94117a69 Cleanup 2026-06-12 10:56:16 -04:00
purian23 92569d8b4d Refactor connected chrome rendering & remove legacy components 2026-06-12 10:56:16 -04:00
purian23 fdee09b583 refactor: enhance plugin visibility w/bar reveal state 2026-06-12 10:56:16 -04:00
purian23 b60af507d7 refactor: implement keyboard focus management 2026-06-12 10:56:16 -04:00
purian23 2cc12b70d2 Update frameBlur performance 2026-06-12 10:56:15 -04:00
purian23 2df1dfe0bd Refactor shadow handling & improve connected chrome rendering 2026-06-12 10:56:15 -04:00
purian23 abf084eea2 refactor(framemode): connected surfaces 2026-06-12 10:56:15 -04:00
326 changed files with 12537 additions and 58315 deletions
+23 -135
View File
@@ -2,16 +2,15 @@
name: dms-plugin-dev
description: >
Develop plugins for DankMaterialShell (DMS), a QML-based Linux desktop shell built on
Quickshell. Supports five plugin types: widget (bar + Control Center), daemon (background
service), launcher (search + actions), desktop (draggable desktop widgets), and composite
(multi-surface). Covers manifest creation, QML component development, startup checks,
settings UI, data persistence, theme integration, PopoutService usage, IPC runtime
discovery, and external command execution. Use when the user wants to create, modify,
or debug a DMS plugin, or asks about the DMS plugin API.
Quickshell. Supports four plugin types: widget (bar + Control Center), daemon (background
service), launcher (search + actions), and desktop (draggable desktop widgets). Covers
manifest creation, QML component development, settings UI, data persistence, theme
integration, PopoutService usage, and external command execution. Use when the user wants
to create, modify, or debug a DMS plugin, or asks about the DMS plugin API.
compatibility: Designed for Claude Code (or similar products)
metadata:
author: DankMaterialShell
version: "1.1"
version: "1.0"
domain: qml-desktop-development
framework: DankMaterialShell
languages: qml, javascript
@@ -38,15 +37,14 @@ integrations, and desktop widgets. Plugins are QML components discovered from
**Plugin registry:** Community plugins are available at https://plugins.danklinux.com/
**Five plugin types:**
**Four plugin types:**
| Type | Purpose | Base Component | Bar pills | CC integration |
|-------------|--------------------------------|----------------------------|-----------|----------------|
| `widget` | Bar widget + popout | `PluginComponent` | Yes | Yes |
| `daemon` | Background service | `PluginComponent` (no UI) | No | Optional |
| `launcher` | Searchable items in launcher | `Item` | No | No |
| `desktop` | Draggable desktop widget | `DesktopPluginComponent` | No | No |
| `composite` | Multi-surface plugin | One component per surface | Optional | Optional |
| Type | Purpose | Base Component | Bar pills | CC integration |
|------------|--------------------------------|----------------------------|-----------|----------------|
| `widget` | Bar widget + popout | `PluginComponent` | Yes | Yes |
| `daemon` | Background service | `PluginComponent` (no UI) | No | Optional |
| `launcher` | Searchable items in launcher | `Item` | No | No |
| `desktop` | Draggable desktop widget | `DesktopPluginComponent` | No | No |
## Step 1: Determine Plugin Type
@@ -60,9 +58,6 @@ Choose the type based on what the plugin does:
with trigger-based filtering (e.g., type `=` for calculator, `:` for emoji).
- **Shows on the desktop background?** - Use `desktop`. Draggable, resizable widget on the
desktop layer.
- **Needs multiple surfaces?** - Use `composite`. A single plugin that registers any combination
of the above (e.g., a daemon + bar widget + desktop widget). Each surface gets its own
QML component file.
## Step 2: Create the Manifest
@@ -83,7 +78,7 @@ Create `plugin.json` in your plugin directory. See [plugin-manifest-reference.md
}
```
**With settings, startup check, and permissions:**
**With settings and permissions:**
```json
{
@@ -97,31 +92,7 @@ Create `plugin.json` in your plugin directory. See [plugin-manifest-reference.md
"component": "./YourWidget.qml",
"icon": "extension",
"settings": "./Settings.qml",
"startupCheck": "./StartupCheck.qml",
"requires_dms": ">=0.1.0",
"dependencies": ["mytool"],
"permissions": ["settings_read", "settings_write"]
}
```
**Composite plugin (multi-surface):**
```json
{
"id": "myComposite",
"name": "My Composite Plugin",
"description": "Daemon + widget + desktop from one plugin",
"version": "1.0.0",
"author": "Your Name",
"type": "composite",
"capabilities": ["daemon", "dankbar-widget", "desktop-widget"],
"icon": "extension",
"components": {
"daemon": "./MyDaemon.qml",
"widget": "./MyBarWidget.qml",
"desktop": "./MyDesktopWidget.qml"
},
"settings": "./Settings.qml",
"permissions": ["settings_read", "settings_write"]
}
```
@@ -129,11 +100,9 @@ Create `plugin.json` in your plugin directory. See [plugin-manifest-reference.md
**Key rules:**
- `id` must be camelCase, matching pattern `^[a-zA-Z][a-zA-Z0-9]*$`
- `version` must be semver (e.g., `1.0.0`)
- Provide either `component` (single-surface) or `components` (multi-surface), not both
- `component` / component paths must start with `./` and end with `.qml`
- `type: "launcher"` (or a `components` object with a `launcher` key) requires a `trigger` field
- `component` must start with `./` and end with `.qml`
- `type: "launcher"` requires a `trigger` field
- `settings_write` permission is **required** if the plugin has a settings component
- `dependencies` replaces the deprecated `requires` field
## Step 3: Create the Main Component
@@ -280,69 +249,7 @@ PluginComponent {
See [daemon-plugin-guide.md](references/daemon-plugin-guide.md) for event-driven patterns and process execution.
### Composite
For composite plugins, create a separate QML file per surface. Each surface uses the same
base component as the corresponding single-surface type (PluginComponent for widget/daemon,
Item for launcher, etc.). All surfaces share the same `pluginId` and `pluginService`.
```
MyCompositePlugin/
plugin.json
MyBarWidget.qml # PluginComponent (widget surface)
MyDaemon.qml # PluginComponent (daemon surface)
MyDesktopWidget.qml # Item with desktop widget properties
Settings.qml # Shared settings for all surfaces
```
Use `pluginService.pluginHasSurface(pluginId, "widget")` to check whether a specific surface
is registered for a plugin at runtime.
## Step 4: Add Startup Check (Optional)
Gate plugin activation on dependency checks by providing a `startupCheck` component. This
runs before the plugin loads and blocks activation if a required tool or condition is missing.
Create a `StartupCheck.qml` (non-visual QtObject):
```qml
import QtQuick
import qs.Common
QtObject {
function check(done) {
Proc.runCommand("myPlugin.depCheck", ["sh", "-c", "command -v mytool"], (stdout, exitCode) => {
if (exitCode === 0) {
done(null);
return;
}
done({
"title": I18n.tr("mytool is required"),
"details": I18n.tr("Install 'mytool' and re-enable this plugin.")
});
});
}
}
```
The `done` callback accepts:
- `null` - allow activation
- A string - block with a short error message
- `{ title, details }` - block with a title and expandable details body
A synchronous variant (no `done` parameter, return the result directly) is also supported.
Failed checks show a toast error and store the error in `pluginService.pluginLoadErrors`.
Add to your manifest:
```json
{
"startupCheck": "./StartupCheck.qml",
"dependencies": ["mytool"]
}
```
## Step 5: Add Settings (Optional)
## Step 4: Add Settings (Optional)
Wrap settings in `PluginSettings` with your `pluginId`. All settings auto-save and auto-load.
@@ -386,7 +293,7 @@ See [settings-components-reference.md](references/settings-components-reference.
**Important:** Your plugin must declare `"permissions": ["settings_write"]` in plugin.json, or the settings UI will show an error.
## Step 6: Use Data Persistence
## Step 5: Use Data Persistence
Three tiers of persistence:
@@ -395,7 +302,6 @@ Three tiers of persistence:
| `pluginService.savePluginData(id, key, val)` / `loadPluginData(id, key, default)` | Yes (settings.json) | User preferences, config |
| `pluginService.savePluginState(id, key, val)` / `loadPluginState(id, key, default)` | Yes (separate state file) | Runtime state, history, cache |
| `PluginGlobalVar { varName; defaultValue; value; set() }` | No (runtime only) | Cross-instance shared state |
| `pluginService.getPluginPath(id)` | N/A | Get the plugin's installation directory path |
- `pluginData` is a reactive property on PluginComponent, auto-loaded from settings
- React to settings changes with `Connections { target: pluginService; function onPluginDataChanged(id) { ... } }`
@@ -403,7 +309,7 @@ Three tiers of persistence:
See [data-persistence-guide.md](references/data-persistence-guide.md) for details and examples.
## Step 7: Theme Integration
## Step 6: Theme Integration
Always use `Theme.*` properties from `qs.Common` - never hardcode colors or sizes.
@@ -418,7 +324,7 @@ Always use `Theme.*` properties from `qs.Common` - never hardcode colors or size
See [theme-reference.md](references/theme-reference.md) for the complete property list.
## Step 8: Add Popout Content (Widgets Only)
## Step 7: Add Popout Content (Widgets Only)
Add a popout that opens when the bar pill is clicked:
@@ -454,7 +360,7 @@ PluginComponent {
Calculate available content height: `popoutHeight - headerHeight - detailsHeight - spacing`
## Step 9: Control Center Integration (Widgets Only)
## Step 8: Control Center Integration (Widgets Only)
Add your widget to the Control Center grid:
@@ -483,7 +389,7 @@ PluginComponent {
**CC sizing:** 25% width = SmallToggleButton (icon only), 50% width = ToggleButton or CompoundPill (if ccDetailContent is defined).
## Step 10: External Commands and Clipboard
## Step 9: External Commands and Clipboard
**Run commands and capture output:**
@@ -514,33 +420,18 @@ Quickshell.execDetached(["dms", "cl", "copy", textToCopy])
**Do NOT use** `globalThis.clipboard` or browser JavaScript APIs - they don't exist in the QML runtime.
## Step 11: Validate and Test
## Step 10: Validate and Test
1. Validate `plugin.json` against the schema at [assets/plugin-schema.json](assets/plugin-schema.json)
2. Run the shell with verbose output: `qs -v -p $CONFIGPATH/quickshell/dms/shell.qml`
3. Open Settings > Plugins > Scan for Plugins
4. Enable your plugin and add it to the DankBar layout
**Runtime plugin discovery via IPC:**
Plugins can be scanned, rescanned, and reloaded at runtime without restarting the shell:
```bash
dms ipc plugin-scan scan # Trigger a full rescan of all plugin directories
dms ipc plugin-scan rescan <id> # Force rescan of a specific plugin
dms ipc plugin-scan reload <id> # Force reload of a loaded plugin
dms ipc plugin-scan list # List all known plugins (TSV: id, loaded, type, name)
dms ipc plugin-scan status <id> # Get status of a specific plugin (TSV: loaded, type, error)
```
Plugin IDs are validated against `^[a-zA-Z0-9_\-:]{1,64}$`.
**Common issues:**
- Plugin not detected: check plugin.json syntax with `jq . plugin.json`
- Widget not showing: ensure it's enabled AND added to a DankBar section
- Settings error: verify `settings_write` permission is declared
- Data not persisting: check pluginService injection and permissions
- Startup check failing: check `pluginService.pluginLoadErrors` or run `dms ipc plugin-scan status <id>`
## Common Mistakes
@@ -554,9 +445,6 @@ Plugin IDs are validated against `^[a-zA-Z0-9_\-:]{1,64}$`.
8. **Forgetting `categories` in launcher items** - Items won't display without it
9. **Not handling null pluginService** - Always use optional chaining or null checks
10. **Using `PluginComponent` for launchers** - Launchers use plain `Item`, not `PluginComponent`
11. **Using `requires` instead of `dependencies`** - `requires` is deprecated; use `dependencies`
12. **Providing both `component` and `components`** - Use one or the other, not both
13. **Missing `trigger` on composite with launcher surface** - Still required when `components` has a `launcher` key
## Quick Reference: Imports
@@ -11,7 +11,8 @@
"version",
"author",
"type",
"capabilities"
"capabilities",
"component"
],
"properties": {
"id": {
@@ -41,8 +42,8 @@
},
"type": {
"type": "string",
"description": "Plugin type. Use 'composite' (or any value) together with 'components' to provide multiple surfaces from one plugin.",
"enum": ["widget", "daemon", "launcher", "desktop", "composite"]
"description": "Plugin type",
"enum": ["widget", "daemon", "launcher", "desktop"]
},
"capabilities": {
"type": "array",
@@ -54,37 +55,9 @@
},
"component": {
"type": "string",
"description": "Relative path to main QML component file. Required unless 'components' is provided.",
"description": "Relative path to main QML component file",
"pattern": "^\\./.*\\.qml$"
},
"components": {
"type": "object",
"description": "Map of surface name to relative QML component path, for multi-surface (composite) plugins. Provide any subset of surfaces; each is loaded independently.",
"properties": {
"widget": {
"type": "string",
"description": "Bar/Control Center widget component (PluginComponent)",
"pattern": "^\\./.*\\.qml$"
},
"desktop": {
"type": "string",
"description": "Desktop widget component",
"pattern": "^\\./.*\\.qml$"
},
"daemon": {
"type": "string",
"description": "Background daemon component (instantiated once)",
"pattern": "^\\./.*\\.qml$"
},
"launcher": {
"type": "string",
"description": "Launcher provider component (requires 'trigger')",
"pattern": "^\\./.*\\.qml$"
}
},
"additionalProperties": false,
"minProperties": 1
},
"trigger": {
"type": "string",
"description": "Trigger string for launcher activation (required for launcher type)"
@@ -98,26 +71,14 @@
"description": "Path to settings component QML file",
"pattern": "^\\./.*\\.qml$"
},
"startupCheck": {
"type": "string",
"description": "Path to a non-visual (QtObject) component exposing a check(done) function that gates activation. done(null) allows; done(error) blocks, where error is a string or { title, details }.",
"pattern": "^\\./.*\\.qml$"
},
"requires_dms": {
"type": "string",
"description": "Minimum DMS version requirement (e.g., '>=0.1.18', '>0.1.0')",
"pattern": "^(>=?|<=?|=|>|<)\\d+\\.\\d+\\.\\d+$"
},
"dependencies": {
"type": "array",
"description": "Array of required system tools/dependencies (registry metadata)",
"items": {
"type": "string"
}
},
"requires": {
"type": "array",
"description": "Deprecated alias for 'dependencies'.",
"description": "Array of required system tools/dependencies",
"items": {
"type": "string"
}
@@ -148,29 +109,6 @@
"then": {
"required": ["trigger"]
}
},
{
"if": {
"required": ["components"],
"properties": {
"components": {
"required": ["launcher"]
}
}
},
"then": {
"required": ["trigger"]
}
},
{
"anyOf": [
{
"required": ["component"]
},
{
"required": ["components"]
}
]
}
],
"additionalProperties": true
@@ -166,16 +166,6 @@ function increment() {
| Cross-instance sync (multi-monitor data) | `PluginGlobalVar` or `getGlobalVar`/`setGlobalVar` | No (runtime only) | All instances |
| Quick reactive reads from settings | `pluginData` property | N/A (read-only) | Per instance |
## Plugin Path
Retrieve a plugin's installation directory at runtime:
```qml
var dir = pluginService.getPluginPath(pluginId)
```
Returns the absolute path to the plugin's directory (e.g., `~/.config/DankMaterialShell/plugins/MyPlugin`), or an empty string if the plugin is not found. Useful for loading bundled assets (images, data files) relative to the plugin's location.
## Important Notes
1. **pluginData is reactive** - bindings update automatically when data changes
@@ -9,22 +9,15 @@
| `description` | string | Short description (shown in UI) | Non-empty |
| `version` | string | Semantic version | Pattern `^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$` |
| `author` | string | Creator name or email | Non-empty |
| `type` | string | Plugin type | One of: `widget`, `daemon`, `launcher`, `desktop`, `composite` |
| `type` | string | Plugin type | One of: `widget`, `daemon`, `launcher`, `desktop` |
| `capabilities` | array | Plugin capabilities | At least 1 string item |
One of `component` or `components` is required (not both):
| Field | Type | Description | Validation |
|-------|------|-------------|------------|
| `component` | string | Path to main QML file (single-surface plugins) | Must start with `./`, end with `.qml` |
| `components` | object | Map of surface name to QML path (multi-surface plugins) | At least 1 entry; keys: `widget`, `desktop`, `daemon`, `launcher` |
| `component` | string | Path to main QML file | Must start with `./`, end with `.qml` |
## Conditional Requirements
| Condition | Required Field | Description |
|-----------|---------------|-------------|
| `type: "launcher"` | `trigger` | Trigger string for launcher activation (e.g., `=`, `#`, `!`) |
| `components` has `launcher` key | `trigger` | Same requirement applies to composite plugins with a launcher surface |
## Optional Fields
@@ -32,10 +25,8 @@ One of `component` or `components` is required (not both):
|-------|------|-------------|
| `icon` | string | Material Design icon name (displayed in plugin list UI) |
| `settings` | string | Path to settings QML file (must start with `./`, end with `.qml`) |
| `startupCheck` | string | Path to a QtObject component that gates plugin activation via a `check(done)` function (must start with `./`, end with `.qml`). See Startup Check section below. |
| `requires_dms` | string | Minimum DMS version (e.g., `>=0.1.18`), pattern `^(>=?\|<=?\|=\|>\|<)\d+\.\d+\.\d+$` |
| `dependencies` | array | System tool dependencies (e.g., `["curl", "jq"]`). Registry metadata. |
| `requires` | array | Deprecated alias for `dependencies` |
| `requires` | array | System tool dependencies (e.g., `["curl", "jq"]`) |
| `permissions` | array | Required permissions |
| `trigger` | string | Launcher trigger string (required for launcher type) |
@@ -62,65 +53,6 @@ Capabilities are free-form strings that describe what the plugin does. Common va
- `ai` - AI/LLM integration
- `slideout` - uses slideout panel
## Startup Check
The `startupCheck` field points to a non-visual `QtObject` component that gates plugin activation on dependency checks. The component must expose a `check(done)` function:
```qml
import QtQuick
import qs.Common
QtObject {
function check(done) {
Proc.runCommand("myPlugin.depCheck", ["sh", "-c", "command -v mytool"], (stdout, exitCode) => {
if (exitCode === 0) {
done(null);
return;
}
done({
"title": I18n.tr("mytool is required"),
"details": I18n.tr("Install 'mytool' and re-enable this plugin.")
});
});
}
}
```
The `done` callback accepts:
- `null` - allow activation
- A string - block with a short error message
- `{ title, details }` - block with a title and expandable details
A synchronous variant (no `done` parameter, return the result directly) is also supported.
Failed startup checks show a toast error and store the error in `pluginService.pluginLoadErrors`.
## Components (Composite Plugins)
The `components` field maps surface names to QML paths, allowing a single plugin to register multiple surfaces:
```json
{
"id": "myComposite",
"name": "My Composite Plugin",
"description": "Daemon + widget + desktop from one plugin",
"version": "1.0.0",
"author": "Developer Name",
"type": "composite",
"capabilities": ["daemon", "dankbar-widget", "desktop-widget"],
"icon": "extension",
"components": {
"daemon": "./MyDaemon.qml",
"widget": "./MyBarWidget.qml",
"desktop": "./MyDesktopWidget.qml"
},
"settings": "./Settings.qml",
"permissions": ["settings_read", "settings_write"]
}
```
Valid surface keys: `widget`, `desktop`, `daemon`, `launcher`. Provide any subset. Each surface is loaded independently in the appropriate registry.
## Complete Example
```json
@@ -135,9 +67,8 @@ Valid surface keys: `widget`, `desktop`, `daemon`, `launcher`. Provide any subse
"component": "./MyWidget.qml",
"icon": "extension",
"settings": "./Settings.qml",
"startupCheck": "./StartupCheck.qml",
"requires_dms": ">=0.1.18",
"dependencies": ["curl", "jq"],
"requires": ["curl", "jq"],
"permissions": ["settings_read", "settings_write", "process", "network"]
}
```
@@ -235,12 +235,10 @@ Conditionally show/hide the bar pill:
```qml
PluginComponent {
visibilityCommand: "pgrep -x myapp"
visibilityInterval: 5 // seconds between checks
visibilityInterval: 5 // seconds between checks; polling pauses while the bar is hidden
}
```
**Bar reveal optimization:** The visibility timer automatically pauses while the bar is hidden (auto-hide mode) and resumes checks when the bar is revealed. This is handled via the internal `_barRevealed` property - no plugin code needed. Plugins using `visibilityCommand` with `visibilityInterval` benefit from this automatically.
## Popout Namespace
For plugins with multiple popout instances, use `layerNamespacePlugin` to isolate popout state:
-6
View File
@@ -117,9 +117,3 @@ quickshell/dms-plugins
__pycache__
.vscode/
# Void (xbps) build artifacts
*.xbps
distro/void/temp/
distro/void/hostdir/
distro/void/masterdir*/
-8
View File
@@ -20,14 +20,6 @@ repos:
language: system
files: ^core/.*\.(go|mod|sum)$
pass_filenames: false
- repo: local
hooks:
- id: settings-search-index
name: settings search index is up to date
entry: bash -c 'python3 quickshell/translations/extract_settings_index.py >/dev/null || exit 1; if ! git diff --exit-code -- quickshell/translations/settings_search_index.json; then echo "settings_search_index.json is out of date; run quickshell/translations/extract_settings_index.py and stage the result" >&2; exit 1; fi'
language: system
files: ^quickshell/(Modules/Settings/.*\.qml|Modals/Settings/SettingsSidebar\.qml|translations/extract_settings_index\.py)$
pass_filenames: false
- repo: local
hooks:
- id: no-console-in-qml
+4 -6
View File
@@ -74,11 +74,10 @@ install-icon:
@echo "Icon installed"
install-desktop:
@echo "Installing desktop entries..."
@echo "Installing desktop entry..."
@install -D -m 644 $(ASSETS_DIR)/dms-open.desktop $(APPLICATIONS_DIR)/dms-open.desktop
@install -D -m 644 $(ASSETS_DIR)/com.danklinux.dms.desktop $(APPLICATIONS_DIR)/com.danklinux.dms.desktop
@update-desktop-database -q $(APPLICATIONS_DIR) 2>/dev/null || true
@echo "Desktop entries installed"
@echo "Desktop entry installed"
install: install-bin install-shell install-completions install-systemd install-icon install-desktop
@echo ""
@@ -117,11 +116,10 @@ uninstall-icon:
@echo "Icon removed"
uninstall-desktop:
@echo "Removing desktop entries..."
@echo "Removing desktop entry..."
@rm -f $(APPLICATIONS_DIR)/dms-open.desktop
@rm -f $(APPLICATIONS_DIR)/com.danklinux.dms.desktop
@update-desktop-database -q $(APPLICATIONS_DIR) 2>/dev/null || true
@echo "Desktop entries removed"
@echo "Desktop entry removed"
uninstall: uninstall-systemd uninstall-desktop uninstall-icon uninstall-completions uninstall-shell uninstall-bin
@echo ""
-11
View File
@@ -1,11 +0,0 @@
[Desktop Entry]
Type=Application
Name=DankMaterialShell
GenericName=Desktop Shell
Comment=Material 3 inspired shell for Wayland compositors
Exec=dms run
Icon=danklogo
Terminal=false
NoDisplay=true
StartupNotify=false
Categories=Utility;
+77 -80
View File
@@ -1,85 +1,82 @@
dir: internal/mocks/{{.InterfaceDirRelative}}
structname: Mock{{.InterfaceName}}
pkgname: '{{.SrcPackageName}}'
filename: 'mock_{{.InterfaceName}}.go'
template: testify
template-data:
unroll-variadic: true
with-expecter: true
dir: "internal/mocks/{{.InterfaceDirRelative}}"
mockname: "Mock{{.InterfaceName}}"
outpkg: "{{.PackageName}}"
packages:
github.com/AvengeMedia/DankMaterialShell/core/internal/geolocation:
config:
dir: internal/mocks/geolocation
pkgname: mocks_geolocation
interfaces:
Client: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/server/cups:
config:
dir: internal/mocks/cups
pkgname: mocks_cups
interfaces:
CUPSClientInterface: {}
PkHelper:
config:
dir: internal/mocks/cups_pkhelper
pkgname: mocks_cups_pkhelper
github.com/AvengeMedia/DankMaterialShell/core/internal/server/evdev:
config:
dir: internal/mocks/evdev
pkgname: mocks_evdev
interfaces:
EvdevDevice: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/server/network:
config:
dir: internal/mocks/network
pkgname: mocks_network
interfaces:
Backend: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/server/wlcontext:
config:
dir: internal/mocks/wlcontext
pkgname: mocks_wlcontext
interfaces:
WaylandContext: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/utils:
config:
dir: internal/mocks/utils
pkgname: mocks_utils
interfaces:
AppChecker: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/version:
config:
dir: internal/mocks/version
pkgname: mocks_version
interfaces:
VersionFetcher: {}
github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client:
config:
dir: internal/mocks/wlclient
pkgname: mocks_wlclient
interfaces:
WaylandDisplay: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/plugins:
interfaces:
GitClient: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/server/brightness:
config:
dir: internal/mocks/brightness
pkgname: mocks_brightness
interfaces:
DBusConn: {}
github.com/Wifx/gonetworkmanager/v2:
interfaces:
AccessPoint: {}
ActiveConnection: {}
Connection: {}
Device: {}
DeviceWireless: {}
IP4Config: {}
NetworkManager: {}
Settings: {}
github.com/godbus/dbus/v5:
interfaces:
BusObject: {}
NetworkManager:
Device:
DeviceWireless:
AccessPoint:
Connection:
Settings:
ActiveConnection:
IP4Config:
net:
interfaces:
Conn: {}
Conn:
github.com/AvengeMedia/danklinux/internal/plugins:
interfaces:
GitClient:
github.com/godbus/dbus/v5:
interfaces:
BusObject:
github.com/AvengeMedia/danklinux/internal/server/brightness:
config:
dir: "internal/mocks/brightness"
outpkg: mocks_brightness
interfaces:
DBusConn:
github.com/AvengeMedia/DankMaterialShell/core/internal/geolocation:
config:
dir: "internal/mocks/geolocation"
outpkg: mocks_geolocation
interfaces:
Client:
github.com/AvengeMedia/DankMaterialShell/core/internal/server/network:
config:
dir: "internal/mocks/network"
outpkg: mocks_network
interfaces:
Backend:
github.com/AvengeMedia/DankMaterialShell/core/internal/server/cups:
config:
dir: "internal/mocks/cups"
outpkg: mocks_cups
interfaces:
CUPSClientInterface:
PkHelper:
config:
dir: "internal/mocks/cups_pkhelper"
outpkg: mocks_cups_pkhelper
github.com/AvengeMedia/DankMaterialShell/core/internal/server/evdev:
config:
dir: "internal/mocks/evdev"
outpkg: mocks_evdev
interfaces:
EvdevDevice:
github.com/AvengeMedia/DankMaterialShell/core/internal/version:
config:
dir: "internal/mocks/version"
outpkg: mocks_version
interfaces:
VersionFetcher:
github.com/AvengeMedia/DankMaterialShell/core/internal/server/wlcontext:
config:
dir: "internal/mocks/wlcontext"
outpkg: mocks_wlcontext
interfaces:
WaylandContext:
github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client:
config:
dir: "internal/mocks/wlclient"
outpkg: mocks_wlclient
interfaces:
WaylandDisplay:
github.com/AvengeMedia/DankMaterialShell/core/internal/utils:
config:
dir: "internal/mocks/utils"
outpkg: mocks_utils
interfaces:
AppChecker:
+1 -1
View File
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/golangci/golangci-lint
rev: v2.12.2
rev: v2.10.1
hooks:
- id: golangci-lint-fmt
require_serial: true
+1 -9
View File
@@ -19,12 +19,7 @@ var (
var colorCmd = &cobra.Command{
Use: "color",
Short: "Color utilities",
Long: `Color utilities including picking colors from the screen.
This is the screen eyedropper CLI. To open the in-shell color modal, use:
dms ipc call color-picker toggle
See: https://danklinux.com/docs/dankmaterialshell/keybinds-ipc`,
Long: "Color utilities including picking colors from the screen",
}
var colorPickCmd = &cobra.Command{
@@ -34,9 +29,6 @@ var colorPickCmd = &cobra.Command{
Click on any pixel to capture its color, or press Escape to cancel.
This is the screen eyedropper CLI. To open the in-shell color modal, use:
dms ipc call color-picker toggle
Output format flags (mutually exclusive, default: --hex):
--hex - Hexadecimal (#RRGGBB)
--rgb - RGB values (R G B)
+3 -43
View File
@@ -77,15 +77,10 @@ var killCmd = &cobra.Command{
}
var ipcCmd = &cobra.Command{
Use: "ipc",
Use: "ipc [target] [function] [args...]",
Short: "Send IPC commands to running DMS shell",
Long: `Send IPC commands to the running DMS shell.
dms ipc call <target> <function> [args...] invoke a command
dms ipc list list all targets and functions
Full reference: https://danklinux.com/docs/dankmaterialshell/keybinds-ipc`,
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
_ = findConfig(cmd, args)
return getShellIPCCompletions(args, toComplete), cobra.ShellCompDirectiveNoFileComp
},
Run: func(cmd *cobra.Command, args []string) {
@@ -93,17 +88,9 @@ Full reference: https://danklinux.com/docs/dankmaterialshell/keybinds-ipc`,
},
}
var ipcListCmd = &cobra.Command{
Use: "list",
Short: "List all IPC targets and functions",
Run: func(cmd *cobra.Command, args []string) {
printIPCHelp()
},
}
func init() {
ipcCmd.AddCommand(ipcListCmd)
ipcCmd.SetHelpFunc(func(cmd *cobra.Command, args []string) {
_ = findConfig(cmd, args)
printIPCHelp()
})
}
@@ -280,13 +267,6 @@ func browsePlugins() error {
return nil
}
feedback := plugins.FetchFeedback()
nameByID := make(map[string]string, len(pluginList))
for _, plugin := range pluginList {
nameByID[plugin.ID] = plugin.Name
}
fmt.Printf("\nAvailable Plugins (%d):\n\n", len(pluginList))
for _, plugin := range pluginList {
installed, _ := manager.IsInstalled(plugin)
@@ -310,26 +290,6 @@ func browsePlugins() error {
if len(plugin.Dependencies) > 0 {
fmt.Printf(" Dependencies: %s\n", strings.Join(plugin.Dependencies, ", "))
}
if fb, ok := feedback[plugin.ID]; ok {
fmt.Printf(" Upvotes: %d\n", fb.Upvotes)
if len(fb.Status) > 0 {
fmt.Printf(" Status: %s\n", strings.Join(fb.Status, ", "))
}
if fb.IssueURL != "" {
fmt.Printf(" Discuss: %s\n", fb.IssueURL)
}
if len(fb.Similar) > 0 {
names := make([]string, len(fb.Similar))
for i, id := range fb.Similar {
if name, ok := nameByID[id]; ok {
names[i] = name
} else {
names[i] = id
}
}
fmt.Printf(" Related: %s\n", strings.Join(names, ", "))
}
}
fmt.Println()
}
-2
View File
@@ -557,8 +557,6 @@ func detectRunningWM() string {
return "Hyprland"
case os.Getenv("NIRI_SOCKET") != "":
return "niri"
case os.Getenv("MANGO_INSTANCE_SIGNATURE") != "":
return "MangoWC"
case os.Getenv("MIRACLESOCK") != "":
return "Miracle WM"
case os.Getenv("XDG_CURRENT_DESKTOP") != "":
+4 -86
View File
@@ -95,35 +95,6 @@ var greeterSyncCmd = &cobra.Command{
},
}
var greeterLaunchSessionCmd = &cobra.Command{
Use: "launch-session",
Short: "Launch a remembered greeter session",
Hidden: true,
Run: func(cmd *cobra.Command, args []string) {
sessionID, _ := cmd.Flags().GetString("session-id")
fromMemory, _ := cmd.Flags().GetBool("from-memory")
cacheDir, _ := cmd.Flags().GetString("cache-dir")
if fromMemory {
homeDir, err := os.UserHomeDir()
if err != nil {
log.Fatalf("failed to get user home directory: %v", err)
}
if err := greeter.LaunchSessionFromMemory(cacheDir, homeDir); err != nil {
log.Fatalf("failed to launch remembered greeter session: %v", err)
}
return
}
if sessionID == "" {
log.Fatal("missing --session-id or --from-memory")
}
if err := greeter.LaunchSessionByID(sessionID); err != nil {
log.Fatalf("failed to launch greeter session %q: %v", sessionID, err)
}
},
}
func init() {
greeterSyncCmd.Flags().BoolP("yes", "y", false, "Non-interactive mode: skip prompts, use defaults (for UI)")
greeterSyncCmd.Flags().BoolP("terminal", "t", false, "Run sync in a new terminal (for entering sudo password); terminal auto-closes when done")
@@ -131,9 +102,6 @@ func init() {
greeterSyncCmd.Flags().BoolP("local", "l", false, "Developer mode: force greetd config to use a local DMS checkout path")
greeterSyncCmd.Flags().BoolP("profile", "p", false, "Sync only your per-user greeter slot (no sudo; for secondary accounts)")
greeterSyncCmd.Flags().Bool("autologin", false, "Apply only greeter auto-login on startup settings to greetd (no theme or auth sync)")
greeterLaunchSessionCmd.Flags().String("session-id", "", "Desktop session id to launch")
greeterLaunchSessionCmd.Flags().Bool("from-memory", false, "Resolve the session id from greeter memory")
greeterLaunchSessionCmd.Flags().String("cache-dir", greeter.GreeterCacheDir, "Greeter cache directory")
}
var greeterEnableCmd = &cobra.Command{
@@ -331,7 +299,7 @@ func installGreeter(nonInteractive bool) error {
fmt.Println("\n=== Installation Complete ===")
fmt.Println("\nTo start the greeter now, run:")
fmt.Println(startGreeterHint())
fmt.Println(" sudo systemctl start greetd")
fmt.Println("\nOr reboot to see the greeter at next boot.")
return nil
@@ -358,13 +326,7 @@ func uninstallGreeter(nonInteractive bool) error {
}
fmt.Println("\nDisabling greetd...")
if isRunit() {
if err := disableRunitService("greetd"); err != nil {
fmt.Printf(" ⚠ Could not disable greetd: %v\n", err)
} else {
fmt.Println(" ✓ greetd disabled")
}
} else if err := privesc.Run(context.Background(), "", "systemctl", "disable", "greetd"); err != nil {
if err := privesc.Run(context.Background(), "", "systemctl", "disable", "greetd"); err != nil {
fmt.Printf(" ⚠ Could not disable greetd: %v\n", err)
} else {
fmt.Println(" ✓ greetd disabled")
@@ -487,14 +449,6 @@ func suggestDisplayManagerRestore(nonInteractive bool) {
enableDM := func(dm string) {
fmt.Printf(" Enabling %s...\n", dm)
if isRunit() {
if err := enableRunitService(dm); err != nil {
fmt.Printf(" ⚠ Failed to enable %s: %v\n", dm, err)
} else {
fmt.Printf(" ✓ %s enabled (linked into %s).\n", dm, runitServiceDir)
}
return
}
if err := privesc.Run(context.Background(), "", "systemctl", "enable", "--force", dm); err != nil {
fmt.Printf(" ⚠ Failed to enable %s: %v\n", dm, err)
} else {
@@ -541,9 +495,6 @@ func suggestDisplayManagerRestore(nonInteractive bool) {
}
func isSystemdUnitInstalled(unit string) bool {
if isRunit() {
return runitServiceInstalled(unit)
}
cmd := exec.Command("systemctl", "list-unit-files", unit+".service", "--no-legend", "--no-pager")
out, err := cmd.Output()
return err == nil && strings.Contains(string(out), unit)
@@ -992,18 +943,6 @@ func resolveLocalDMSPath() (string, error) {
}
func disableDisplayManager(dmName string) (bool, error) {
if isRunit() {
if !runitServiceEnabled(dmName) {
return false, nil
}
fmt.Printf("\nDisabling %s (runit)...\n", dmName)
if err := disableRunitService(dmName); err != nil {
return false, fmt.Errorf("failed to disable %s: %w", dmName, err)
}
fmt.Printf(" ✓ %s disabled (removed from %s)\n", dmName, runitServiceDir)
return true, nil
}
state, err := getSystemdServiceState(dmName)
if err != nil {
return false, fmt.Errorf("failed to check %s state: %w", dmName, err)
@@ -1057,21 +996,6 @@ func disableDisplayManager(dmName string) (bool, error) {
}
func ensureGreetdEnabled() error {
if isRunit() {
fmt.Println("\nEnabling greetd service (runit)...")
if !runitServiceInstalled("greetd") {
return fmt.Errorf("greetd service not found in %s. Please install greetd first", runitSvDir)
}
// Seat + runtime-dir setup that logind handles automatically on systemd.
ensureRunitSeat("_greeter")
ensureGreetdPamRundir()
if err := enableRunitService("greetd"); err != nil {
return fmt.Errorf("failed to enable greetd: %w", err)
}
fmt.Printf(" ✓ greetd enabled (%s)\n", runitServiceDir)
return nil
}
fmt.Println("\nChecking greetd service status...")
state, err := getSystemdServiceState("greetd")
@@ -1119,12 +1043,6 @@ func ensureGreetdEnabled() error {
}
func ensureGraphicalTarget() error {
if isRunit() {
// runit has no targets; a supervised greetd service is the graphical
// login, so there is nothing to set here.
return nil
}
getDefaultCmd := exec.Command("systemctl", "get-default")
currentTarget, err := getDefaultCmd.Output()
if err != nil {
@@ -1258,7 +1176,7 @@ func enableGreeter(nonInteractive bool) error {
fmt.Println("\n=== Enable Complete ===")
fmt.Println("\nGreeter configuration verified and system state corrected.")
fmt.Println("To start the greeter now, run:")
fmt.Println(startGreeterHint())
fmt.Println(" sudo systemctl start greetd")
fmt.Println("\nOr reboot to see the greeter at boot time.")
return nil
@@ -1339,7 +1257,7 @@ func enableGreeter(nonInteractive bool) error {
fmt.Println("\n=== Enable Complete ===")
fmt.Println("\nTo start the greeter now, run:")
fmt.Println(startGreeterHint())
fmt.Println(" sudo systemctl start greetd")
fmt.Println("\nOr reboot to see the greeter at boot time.")
return nil
-114
View File
@@ -1,114 +0,0 @@
package main
import (
"context"
"fmt"
"os"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/privesc"
)
// runit (Void Linux) service helpers. Services live in /etc/sv and are "enabled"
// by symlinking them into the /var/service supervision dir, so the greeter
// commands branch on isRunit() instead of shelling systemctl.
const (
runitSvDir = "/etc/sv"
runitServiceDir = "/var/service"
)
// isRunit reports whether this system is supervised by runit (Void Linux).
func isRunit() bool {
if fi, err := os.Stat("/run/runit"); err == nil && fi.IsDir() {
return true
}
if _, err := os.Stat("/run/systemd/system"); err == nil {
return false
}
if fi, err := os.Stat(runitServiceDir); err == nil && fi.IsDir() {
return true
}
return false
}
func runitServiceInstalled(name string) bool {
fi, err := os.Stat(runitSvDir + "/" + name)
return err == nil && fi.IsDir()
}
func runitServiceEnabled(name string) bool {
_, err := os.Lstat(runitServiceDir + "/" + name)
return err == nil
}
// enableRunitService links a service into /var/service (idempotent).
func enableRunitService(name string) error {
if !runitServiceInstalled(name) {
return fmt.Errorf("runit service %q not found in %s", name, runitSvDir)
}
if runitServiceEnabled(name) {
return nil
}
return privesc.Run(context.Background(), "", "ln", "-sf",
runitSvDir+"/"+name, runitServiceDir+"/"+name)
}
// disableRunitService removes a service's supervision symlink.
func disableRunitService(name string) error {
if !runitServiceEnabled(name) {
return nil
}
return privesc.Run(context.Background(), "", "rm", "-f",
runitServiceDir+"/"+name)
}
// ensureRunitSeat sets up the seat access a Wayland greeter needs on runit (the
// equivalent of logind on systemd): enables seatd and adds the greeter user to
// the seat/video/input groups. Failures are reported but non-fatal.
func ensureRunitSeat(greeterUser string) {
if runitServiceInstalled("seatd") {
if err := enableRunitService("seatd"); err != nil {
fmt.Printf(" ⚠ could not enable seatd: %v\n", err)
} else {
fmt.Println(" ✓ seatd enabled")
}
} else {
fmt.Println(" ⚠ seatd not installed — the greeter compositor needs it for GPU/seat access")
}
if err := privesc.Run(context.Background(), "", "usermod", "-aG", "_seatd,video,input", greeterUser); err != nil {
fmt.Printf(" ⚠ could not add %s to seat groups: %v\n", greeterUser, err)
} else {
fmt.Printf(" ✓ %s added to seat groups (_seatd, video, input)\n", greeterUser)
}
}
// ensureGreetdPamRundir adds pam_rundir to the greetd PAM stack so the post-login
// session gets an XDG_RUNTIME_DIR on systems without logind (Void with seatd).
// Appended outside DMS's managed auth block so it survives `dms greeter sync`.
func ensureGreetdPamRundir() {
const pamPath = "/etc/pam.d/greetd"
data, err := os.ReadFile(pamPath)
if err != nil {
fmt.Printf(" ⚠ could not read %s: %v\n", pamPath, err)
return
}
if strings.Contains(string(data), "pam_rundir") {
return
}
line := "session optional pam_rundir.so"
if err := privesc.Run(context.Background(), "", "sh", "-c",
fmt.Sprintf("printf '%%s\\n' %q >> %s", line, pamPath)); err != nil {
fmt.Printf(" ⚠ could not add pam_rundir to %s: %v\n", pamPath, err)
return
}
fmt.Println(" ✓ pam_rundir added to greetd PAM (provides XDG_RUNTIME_DIR for the session)")
}
// startGreeterHint returns the init-appropriate "start greetd now" command.
func startGreeterHint() string {
if isRunit() {
return " sudo sv up greetd"
}
return " sudo systemctl start greetd"
}
+1 -1
View File
@@ -19,7 +19,7 @@ func init() {
runCmd.Flags().String("log-file", "", "Append logs to this file in addition to stderr (overrides DMS_LOG_FILE)")
runCmd.Flags().MarkHidden("daemon-child")
greeterCmd.AddCommand(greeterInstallCmd, greeterSyncCmd, greeterEnableCmd, greeterStatusCmd, greeterUninstallCmd, greeterLaunchSessionCmd)
greeterCmd.AddCommand(greeterInstallCmd, greeterSyncCmd, greeterEnableCmd, greeterStatusCmd, greeterUninstallCmd)
authCmd.AddCommand(authSyncCmd)
setupCmd.AddCommand(setupBindsCmd, setupLayoutCmd, setupColorsCmd, setupAlttabCmd, setupOutputsCmd, setupCursorCmd, setupWindowrulesCmd)
updateCmd.AddCommand(updateCheckCmd)
+1 -1
View File
@@ -19,7 +19,7 @@ func init() {
runCmd.Flags().String("log-file", "", "Append logs to this file in addition to stderr (overrides DMS_LOG_FILE)")
runCmd.Flags().MarkHidden("daemon-child")
greeterCmd.AddCommand(greeterInstallCmd, greeterSyncCmd, greeterEnableCmd, greeterStatusCmd, greeterUninstallCmd, greeterLaunchSessionCmd)
greeterCmd.AddCommand(greeterInstallCmd, greeterSyncCmd, greeterEnableCmd, greeterStatusCmd, greeterUninstallCmd)
authCmd.AddCommand(authSyncCmd)
setupCmd.AddCommand(setupBindsCmd, setupLayoutCmd, setupColorsCmd, setupAlttabCmd, setupOutputsCmd, setupCursorCmd, setupWindowrulesCmd)
pluginsCmd.AddCommand(pluginsBrowseCmd, pluginsListCmd, pluginsInstallCmd, pluginsUninstallCmd, pluginsUpdateCmd)
-7
View File
@@ -101,13 +101,6 @@ func getServerSocketPath() string {
runtimeDir = os.TempDir()
}
if parentPID, ok := sessionParentPID(os.Getenv("WAYLAND_DISPLAY")); ok {
sessionSock := filepath.Join(runtimeDir, fmt.Sprintf("danklinux-%d.sock", parentPID))
if _, err := os.Stat(sessionSock); err == nil {
return sessionSock
}
}
entries, err := os.ReadDir(runtimeDir)
if err != nil {
return filepath.Join(runtimeDir, "danklinux.sock")
+32 -124
View File
@@ -101,23 +101,14 @@ func getPIDFilePath() string {
return filepath.Join(getRuntimeDir(), fmt.Sprintf("danklinux-%d.pid", os.Getpid()))
}
func getSessionFilePath() string {
return filepath.Join(getRuntimeDir(), fmt.Sprintf("danklinux-%d.session", os.Getpid()))
}
func writePIDFile(childPID int) error {
pidFile := getPIDFilePath()
if display := os.Getenv("WAYLAND_DISPLAY"); display != "" {
if err := os.WriteFile(getSessionFilePath(), []byte(display), 0o644); err != nil {
log.Warnf("Failed to write session file: %v", err)
}
}
return os.WriteFile(pidFile, []byte(strconv.Itoa(childPID)), 0o644)
}
func removePIDFile() {
os.Remove(getPIDFilePath())
os.Remove(getSessionFilePath())
pidFile := getPIDFilePath()
os.Remove(pidFile)
}
func getAllDMSPIDs() []int {
@@ -234,9 +225,6 @@ func runShellInteractive(session bool) {
if os.Getenv("QT_QPA_PLATFORM") == "" {
cmd.Env = append(cmd.Env, "QT_QPA_PLATFORM=wayland;xcb")
}
if os.Getenv("QSG_USE_SIMPLE_ANIMATION_DRIVER") == "" {
cmd.Env = append(cmd.Env, "QSG_USE_SIMPLE_ANIMATION_DRIVER=1")
}
cmd.Env = appendLogEnv(cmd.Env)
@@ -399,11 +387,9 @@ func killShell() {
}
for _, entry := range entries {
if !strings.HasPrefix(entry.Name(), "danklinux-") {
continue
}
if strings.HasSuffix(entry.Name(), ".pid") || strings.HasSuffix(entry.Name(), ".session") {
os.Remove(filepath.Join(dir, entry.Name()))
if strings.HasPrefix(entry.Name(), "danklinux-") && strings.HasSuffix(entry.Name(), ".pid") {
pidFile := filepath.Join(dir, entry.Name())
os.Remove(pidFile)
}
}
}
@@ -491,9 +477,6 @@ func runShellDaemon(session bool) {
if os.Getenv("QT_QPA_PLATFORM") == "" {
cmd.Env = append(cmd.Env, "QT_QPA_PLATFORM=wayland;xcb")
}
if os.Getenv("QSG_USE_SIMPLE_ANIMATION_DRIVER") == "" {
cmd.Env = append(cmd.Env, "QSG_USE_SIMPLE_ANIMATION_DRIVER=1")
}
cmd.Env = appendLogEnv(cmd.Env)
@@ -618,30 +601,12 @@ func parseTargetsFromIPCShowOutput(output string) ipcTargets {
return targets
}
func buildQsIPCBaseArgs() ([]string, error) {
cmdArgs := []string{"ipc"}
switch pid, ok := getSessionDMSPID(); {
case ok:
cmdArgs = append(cmdArgs, "--pid", strconv.Itoa(pid))
default:
if err := findConfig(nil, nil); err != nil {
return nil, err
}
if qsHasAnyDisplay() {
cmdArgs = append(cmdArgs, "--any-display")
}
cmdArgs = append(cmdArgs, "-p", configPath)
}
return cmdArgs, nil
}
func getShellIPCCompletions(args []string, _ string) []string {
baseArgs, err := buildQsIPCBaseArgs()
if err != nil {
log.Debugf("Error building IPC args for completions: %v", err)
return nil
cmdArgs := []string{"ipc"}
if qsHasAnyDisplay() {
cmdArgs = append(cmdArgs, "--any-display")
}
cmdArgs := append(baseArgs, "show")
cmdArgs = append(cmdArgs, "-p", configPath, "show")
cmd := exec.Command("qs", cmdArgs...)
var targets ipcTargets
@@ -658,7 +623,7 @@ func getShellIPCCompletions(args []string, _ string) []string {
if len(args) == 0 {
targetNames := make([]string, 0)
targetNames = append(targetNames, "call", "list")
targetNames = append(targetNames, "call")
for k := range targets {
targetNames = append(targetNames, k)
}
@@ -721,64 +686,6 @@ func getFirstDMSPID() (int, bool) {
return 0, false
}
func sessionParentPID(display string) (int, bool) {
if display == "" {
return 0, false
}
dir := getRuntimeDir()
entries, err := os.ReadDir(dir)
if err != nil {
return 0, false
}
for _, entry := range entries {
name := entry.Name()
if !strings.HasPrefix(name, "danklinux-") || !strings.HasSuffix(name, ".session") {
continue
}
data, err := os.ReadFile(filepath.Join(dir, name))
if err != nil || strings.TrimSpace(string(data)) != display {
continue
}
parentStr := strings.TrimSuffix(strings.TrimPrefix(name, "danklinux-"), ".session")
parentPID, err := strconv.Atoi(parentStr)
if err != nil {
continue
}
return parentPID, true
}
return 0, false
}
func getSessionDMSPID() (int, bool) {
parentPID, ok := sessionParentPID(os.Getenv("WAYLAND_DISPLAY"))
if !ok {
return getFirstDMSPID()
}
data, err := os.ReadFile(filepath.Join(getRuntimeDir(), fmt.Sprintf("danklinux-%d.pid", parentPID)))
if err != nil {
return getFirstDMSPID()
}
pid, err := strconv.Atoi(strings.TrimSpace(string(data)))
if err != nil {
return getFirstDMSPID()
}
proc, err := os.FindProcess(pid)
if err != nil || proc.Signal(syscall.Signal(0)) != nil {
return getFirstDMSPID()
}
return pid, true
}
func runShellIPCCommand(args []string) {
if len(args) == 0 {
printIPCHelp()
@@ -789,11 +696,23 @@ func runShellIPCCommand(args []string) {
args = append([]string{"call"}, args...)
}
baseArgs, err := buildQsIPCBaseArgs()
if err != nil {
log.Fatalf("Error finding config: %v", err)
cmdArgs := []string{"ipc"}
switch pid, ok := getFirstDMSPID(); {
case ok:
cmdArgs = append(cmdArgs, "--pid", strconv.Itoa(pid))
default:
if err := findConfig(nil, nil); err != nil {
log.Fatalf("Error finding config: %v", err)
}
// ! TODO - remove check when QS 0.3 is released
if qsHasAnyDisplay() {
cmdArgs = append(cmdArgs, "--any-display")
}
cmdArgs = append(cmdArgs, "-p", configPath)
}
cmdArgs := append(baseArgs, args...)
cmdArgs = append(cmdArgs, args...)
cmd := exec.Command("qs", cmdArgs...)
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
@@ -805,20 +724,19 @@ func runShellIPCCommand(args []string) {
}
func printIPCHelp() {
fmt.Println("Usage: dms ipc call <target> <function> [args...]")
fmt.Println("Usage: dms ipc <target> <function> [args...]")
fmt.Println()
baseArgs, err := buildQsIPCBaseArgs()
if err != nil {
printIPCHelpFailure(err)
return
cmdArgs := []string{"ipc"}
if qsHasAnyDisplay() {
cmdArgs = append(cmdArgs, "--any-display")
}
cmdArgs := append(baseArgs, "show")
cmdArgs = append(cmdArgs, "-p", configPath, "show")
cmd := exec.Command("qs", cmdArgs...)
output, err := cmd.Output()
if err != nil {
printIPCHelpFailure(err)
fmt.Println("Could not retrieve available IPC targets (is DMS running?)")
return
}
@@ -847,16 +765,6 @@ func printIPCHelp() {
}
}
func printIPCHelpFailure(err error) {
fmt.Println("Could not retrieve IPC targets.")
if err != nil {
fmt.Printf(" %v\n", err)
}
fmt.Println()
fmt.Println(" Full docs: https://danklinux.com/docs/dankmaterialshell/keybinds-ipc")
fmt.Println(" Try: dms ipc call <target> <function>")
}
// ensureFontCache rebuilds the fontconfig cache if user-configured fonts are missing while skipping defaults
func ensureFontCache() {
if _, err := exec.LookPath("fc-list"); err != nil {
+1 -1
View File
@@ -22,6 +22,7 @@ require (
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
go.etcd.io/bbolt v1.4.3
go4.org/mem v0.0.0-20240501181205-ae6ca9944745
golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f
golang.org/x/image v0.39.0
tailscale.com v1.96.5
)
@@ -63,7 +64,6 @@ require (
github.com/yeqown/reedsolomon v1.0.0 // indirect
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
golang.org/x/crypto v0.50.0 // indirect
golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect
golang.org/x/net v0.53.0 // indirect
golang.org/x/sync v0.20.0 // indirect
golang.zx2c4.com/wireguard/windows v1.0.1 // indirect
+22 -32
View File
@@ -233,39 +233,24 @@ func stripDesktopExecCodes(execLine string) string {
return strings.Join(cleaned, " ")
}
func shellQuote(value string) string {
return "'" + strings.ReplaceAll(value, "'", "'\\''") + "'"
}
func stableDMSCommand() string {
for _, candidate := range []string{"/usr/bin/dms", "/usr/local/bin/dms"} {
info, err := os.Stat(candidate)
if err == nil && !info.IsDir() && info.Mode()&0o111 != 0 {
return candidate
}
}
return "dms"
}
func formatInitialSessionCommand(cacheDir string) string {
cacheDir = strings.TrimSpace(cacheDir)
if cacheDir == "" {
func formatInitialSessionCommand(sessionExec string) string {
execLine := strings.TrimSpace(stripDesktopExecCodes(sessionExec))
if execLine == "" {
return `command = ""`
}
launcher := fmt.Sprintf("%s greeter launch-session --from-memory --cache-dir %s", stableDMSCommand(), shellQuote(cacheDir))
escaped := strings.ReplaceAll(launcher, `'`, `'\''`)
escaped := strings.ReplaceAll(execLine, `'`, `'\''`)
inner := fmt.Sprintf("env XDG_SESSION_TYPE=wayland sh -c 'exec %s'", escaped)
tomlEscaped := strings.ReplaceAll(inner, `\`, `\\`)
tomlEscaped = strings.ReplaceAll(tomlEscaped, `"`, `\"`)
return fmt.Sprintf(`command = "%s"`, tomlEscaped)
}
func upsertInitialSession(configContent, loginUser, cacheDir string, enabled bool) string {
func upsertInitialSession(configContent, loginUser, sessionExec string, enabled bool) string {
if !enabled {
return removeTomlSection(configContent, "initial_session")
}
commandLine := formatInitialSessionCommand(cacheDir)
commandLine := formatInitialSessionCommand(sessionExec)
lines := strings.Split(configContent, "\n")
var out []string
@@ -343,11 +328,10 @@ type greeterAutoLoginConfig struct {
}
type greeterAutoLoginMemory struct {
LastSuccessfulUser string `json:"lastSuccessfulUser"`
LastSessionID string `json:"lastSessionId"`
LastSessionDesktopID string `json:"lastSessionDesktopId"`
LastSessionExec string `json:"lastSessionExec"`
AutoLoginEnabled bool `json:"autoLoginEnabled"`
LastSuccessfulUser string `json:"lastSuccessfulUser"`
LastSessionID string `json:"lastSessionId"`
LastSessionExec string `json:"lastSessionExec"`
AutoLoginEnabled bool `json:"autoLoginEnabled"`
}
func readGreeterAutoLoginConfig(settingsPath string) (greeterAutoLoginConfig, error) {
@@ -397,7 +381,7 @@ func execFromDesktopFile(path string) (string, error) {
return "", fmt.Errorf("no Exec= line found in %s", path)
}
func resolveGreeterAutoLoginState(cacheDir, homeDir string) (enabled bool, loginUser string, sessionID string, err error) {
func resolveGreeterAutoLoginState(cacheDir, homeDir string) (enabled bool, loginUser string, sessionExec string, err error) {
settingsPath := filepath.Join(cacheDir, "settings.json")
if _, statErr := os.Stat(settingsPath); statErr != nil {
settingsPath = filepath.Join(homeDir, ".config", "DankMaterialShell", "settings.json")
@@ -432,9 +416,15 @@ func resolveGreeterAutoLoginState(cacheDir, homeDir string) (enabled bool, login
loginUser = current.Username
}
sessionID = sessionDesktopIDFromMemory(mem)
sessionExec = mem.LastSessionExec
if sessionExec == "" && mem.LastSessionID != "" {
sessionExec, err = execFromDesktopFile(mem.LastSessionID)
if err != nil {
sessionExec = ""
}
}
return true, loginUser, sessionID, nil
return true, loginUser, sessionExec, nil
}
func writeGreetdConfig(configPath, content string, logFunc func(string), sudoPassword, successMsg string) error {
@@ -550,7 +540,7 @@ func readGreeterMemoryFile(memoryPath, sudoPassword string) ([]byte, error) {
}
func SyncGreetdAutoLogin(cacheDir, homeDir string, logFunc func(string), sudoPassword string) error {
enabled, loginUser, sessionID, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
enabled, loginUser, sessionExec, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
if err != nil {
return err
}
@@ -578,7 +568,7 @@ func SyncGreetdAutoLogin(cacheDir, homeDir string, logFunc func(string), sudoPas
return writeGreetdConfig(configPath, newConfig, logFunc, sudoPassword, "✓ Disabled greeter auto-login")
}
if loginUser == "" || sessionID == "" {
if loginUser == "" || sessionExec == "" {
if logFunc != nil {
logFunc("⚠ Greeter auto-login is enabled but user or session is not configured yet. Log in manually once, then run sync.")
}
@@ -589,7 +579,7 @@ func SyncGreetdAutoLogin(cacheDir, homeDir string, logFunc func(string), sudoPas
return nil
}
newConfig := upsertInitialSession(configContent, loginUser, cacheDir, true)
newConfig := upsertInitialSession(configContent, loginUser, sessionExec, true)
if newConfig == configContent {
if logFunc != nil {
logFunc(fmt.Sprintf("✓ Greeter auto-login already configured for %s", loginUser))
+13 -70
View File
@@ -111,18 +111,15 @@ command = "/usr/bin/dms-greeter --command niri"
t.Run("inserts initial session", func(t *testing.T) {
t.Parallel()
got := upsertInitialSession(baseConfig, "alice", "/var/cache/dms-greeter", true)
got := upsertInitialSession(baseConfig, "alice", "niri", true)
if !strings.Contains(got, "[initial_session]") {
t.Fatalf("expected [initial_session] section, got:\n%s", got)
}
if !strings.Contains(got, `user = "alice"`) {
t.Fatalf("expected alice user in initial session, got:\n%s", got)
}
if !strings.Contains(got, `dms greeter launch-session --from-memory --cache-dir`) {
t.Fatalf("expected stable launch-session command, got:\n%s", got)
}
if strings.Contains(got, `exec niri`) {
t.Fatalf("initial session must not bake the desktop Exec command, got:\n%s", got)
if !strings.Contains(got, `env XDG_SESSION_TYPE=wayland sh -c 'exec niri'`) {
t.Fatalf("expected wrapped session command, got:\n%s", got)
}
})
@@ -133,12 +130,12 @@ command = "/usr/bin/dms-greeter --command niri"
user = "bob"
command = "old-command"
`
got := upsertInitialSession(existing, "alice", "/var/cache/dms-greeter", true)
got := upsertInitialSession(existing, "alice", "Hyprland", true)
if strings.Contains(got, `user = "bob"`) {
t.Fatalf("expected bob to be replaced, got:\n%s", got)
}
if !strings.Contains(got, `dms greeter launch-session --from-memory`) {
t.Fatalf("expected launch-session command, got:\n%s", got)
if !strings.Contains(got, `exec Hyprland`) {
t.Fatalf("expected Hyprland command, got:\n%s", got)
}
})
@@ -182,46 +179,15 @@ func TestResolveGreeterAutoLoginState(t *testing.T) {
}`)
writeTestFile(t, filepath.Join(cacheDir, ".local/state/memory.json"), `{
"lastSuccessfulUser": "alice",
"lastSessionDesktopId": "niri.desktop"
"lastSessionExec": "niri"
}`)
enabled, loginUser, sessionID, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
enabled, loginUser, sessionExec, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
if err != nil {
t.Fatalf("resolveGreeterAutoLoginState returned error: %v", err)
}
if !enabled || loginUser != "alice" || sessionID != "niri.desktop" {
t.Fatalf("got enabled=%v user=%q session=%q", enabled, loginUser, sessionID)
}
}
func TestResolveGreeterAutoLoginStateIgnoresStaleSessionExec(t *testing.T) {
t.Parallel()
cacheDir := t.TempDir()
homeDir := t.TempDir()
writeTestFile(t, filepath.Join(cacheDir, "settings.json"), `{
"greeterAutoLogin": true,
"greeterRememberLastUser": true,
"greeterRememberLastSession": true
}`)
writeTestFile(t, filepath.Join(cacheDir, ".local/state/memory.json"), `{
"lastSuccessfulUser": "alice",
"lastSessionId": "/nix/store/old-session/share/wayland-sessions/example.desktop",
"lastSessionExec": "/nix/store/old-session/bin/start-example-session"
}`)
enabled, loginUser, sessionID, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
if err != nil {
t.Fatalf("resolveGreeterAutoLoginState returned error: %v", err)
}
if !enabled || loginUser != "alice" || sessionID != "example.desktop" {
t.Fatalf("got enabled=%v user=%q session=%q", enabled, loginUser, sessionID)
}
got := upsertInitialSession("", loginUser, cacheDir, true)
if strings.Contains(got, "/nix/store/old-session") {
t.Fatalf("initial session must not include stale store path, got:\n%s", got)
if !enabled || loginUser != "alice" || sessionExec != "niri" {
t.Fatalf("got enabled=%v user=%q exec=%q", enabled, loginUser, sessionExec)
}
}
@@ -242,35 +208,12 @@ func TestResolveGreeterAutoLoginStateIgnoresMemoryFlag(t *testing.T) {
"lastSessionExec": "niri"
}`)
enabled, loginUser, sessionID, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
enabled, loginUser, sessionExec, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
if err != nil {
t.Fatalf("resolveGreeterAutoLoginState returned error: %v", err)
}
if enabled || loginUser != "" || sessionID != "" {
t.Fatalf("expected disabled with empty user/session, got enabled=%v user=%q session=%q", enabled, loginUser, sessionID)
}
}
func TestResolveSessionExecInDirs(t *testing.T) {
t.Parallel()
oldDir := filepath.Join(t.TempDir(), "wayland-sessions")
newDir := filepath.Join(t.TempDir(), "wayland-sessions")
writeTestFile(t, filepath.Join(oldDir, "example.desktop"), `[Desktop Entry]
Name=Example Session
Exec=/nix/store/old-session/bin/start-example-session
`)
writeTestFile(t, filepath.Join(newDir, "example.desktop"), `[Desktop Entry]
Name=Example Session
Exec=/run/current-system/sw/bin/start-example-session
`)
got, err := resolveSessionExecInDirs("example.desktop", []string{newDir, oldDir})
if err != nil {
t.Fatalf("resolveSessionExecInDirs returned error: %v", err)
}
if got != "/run/current-system/sw/bin/start-example-session" {
t.Fatalf("resolveSessionExecInDirs = %q", got)
if enabled || loginUser != "" || sessionExec != "" {
t.Fatalf("expected disabled with empty user/exec, got enabled=%v user=%q exec=%q", enabled, loginUser, sessionExec)
}
}
-122
View File
@@ -1,122 +0,0 @@
package greeter
import (
"fmt"
"os"
"path/filepath"
"strings"
"syscall"
)
func sessionDesktopIDFromPath(path string) string {
id := strings.TrimSpace(path)
if id == "" {
return ""
}
if strings.ContainsAny(id, "/\\") {
id = filepath.Base(id)
}
if id == "" {
return ""
}
if !strings.HasSuffix(id, ".desktop") {
id += ".desktop"
}
return id
}
func sessionDesktopIDFromMemory(mem greeterAutoLoginMemory) string {
if id := sessionDesktopIDFromPath(mem.LastSessionDesktopID); id != "" {
return id
}
return sessionDesktopIDFromPath(mem.LastSessionID)
}
func sessionDesktopDirs() []string {
seen := make(map[string]bool)
dirs := make([]string, 0, 8)
addBase := func(base string) {
base = strings.TrimSpace(base)
if base == "" {
return
}
for _, sub := range []string{"wayland-sessions", "xsessions"} {
dir := filepath.Join(base, sub)
if seen[dir] {
continue
}
seen[dir] = true
dirs = append(dirs, dir)
}
}
if dataHome := os.Getenv("XDG_DATA_HOME"); dataHome != "" {
addBase(dataHome)
} else if home, err := os.UserHomeDir(); err == nil && home != "" {
addBase(filepath.Join(home, ".local", "share"))
}
if dataDirs := os.Getenv("XDG_DATA_DIRS"); dataDirs != "" {
for _, dir := range strings.Split(dataDirs, ":") {
addBase(dir)
}
} else {
addBase("/usr/local/share")
addBase("/usr/share")
}
return dirs
}
func ResolveSessionExec(sessionID string) (string, error) {
return resolveSessionExecInDirs(sessionID, sessionDesktopDirs())
}
func resolveSessionExecInDirs(sessionID string, dirs []string) (string, error) {
id := sessionDesktopIDFromPath(sessionID)
if id == "" {
return "", fmt.Errorf("session id is empty")
}
for _, dir := range dirs {
path := filepath.Join(dir, id)
execLine, err := execFromDesktopFile(path)
if err == nil {
return execLine, nil
}
if !os.IsNotExist(err) {
return "", err
}
}
return "", fmt.Errorf("session desktop file %q was not found", id)
}
func LaunchSessionByID(sessionID string) error {
execLine, err := ResolveSessionExec(sessionID)
if err != nil {
return err
}
execLine = strings.TrimSpace(stripDesktopExecCodes(execLine))
if execLine == "" {
return fmt.Errorf("session %q has an empty Exec command", sessionID)
}
env := append(os.Environ(), "XDG_SESSION_TYPE=wayland")
return syscall.Exec("/bin/sh", []string{"sh", "-c", "exec " + execLine}, env)
}
func LaunchSessionFromMemory(cacheDir, homeDir string) error {
enabled, _, sessionID, err := resolveGreeterAutoLoginState(cacheDir, homeDir)
if err != nil {
return err
}
if !enabled {
return fmt.Errorf("greeter auto-login is disabled")
}
if sessionID == "" {
return fmt.Errorf("greeter auto-login has no remembered session")
}
return LaunchSessionByID(sessionID)
}
+1 -13
View File
@@ -190,13 +190,9 @@ func (h *HyprlandProvider) formatRawAction(dispatcher, params string) string {
}
func (h *HyprlandProvider) formatKey(kb *HyprlandKeyBinding) string {
key := kb.Key
if canonical, ok := hyprlandScrollToCanonical(key); ok {
key = canonical
}
parts := make([]string, 0, len(kb.Mods)+1)
parts = append(parts, kb.Mods...)
parts = append(parts, key)
parts = append(parts, kb.Key)
return strings.Join(parts, "+")
}
@@ -415,9 +411,6 @@ func normalizeLuaBindKeyPart(part string) string {
case "alt", "mod1":
return "ALT"
}
if native, ok := hyprlandScrollToNative(part); ok {
return native
}
if len(part) == 1 {
return strings.ToUpper(part)
}
@@ -1137,11 +1130,6 @@ func parseLuaUnbindLine(line string) (string, bool) {
func luaKeyComboToInternalKey(combo string) string {
parts := strings.Fields(strings.ReplaceAll(strings.ReplaceAll(combo, "+", " "), " ", " "))
for i, part := range parts {
if canonical, ok := hyprlandScrollToCanonical(part); ok {
parts[i] = canonical
}
}
return strings.Join(parts, "+")
}
@@ -347,13 +347,9 @@ func (p *HyprlandParser) buildDMSStatus() *HyprlandDMSStatus {
}
func (p *HyprlandParser) formatBindKey(kb *HyprlandKeyBinding) string {
key := kb.Key
if canonical, ok := hyprlandScrollToCanonical(key); ok {
key = canonical
}
parts := make([]string, 0, len(kb.Mods)+1)
parts = append(parts, kb.Mods...)
parts = append(parts, key)
parts = append(parts, kb.Key)
return strings.Join(parts, "+")
}
@@ -486,61 +486,6 @@ hl.bind("SUPER + 1", hl.dsp.exec_cmd("hyprctl dispatch workspace 1"))
}
}
func TestHyprlandSetBindTranslatesScrollWheelToMouse(t *testing.T) {
tmpDir := t.TempDir()
dmsDir := filepath.Join(tmpDir, "dms")
if err := os.MkdirAll(dmsDir, 0o755); err != nil {
t.Fatal(err)
}
bindsUser := filepath.Join(dmsDir, "binds-user.lua")
if err := os.WriteFile(bindsUser, []byte("-- DMS user keybind overrides\n"), 0o644); err != nil {
t.Fatal(err)
}
provider := NewHyprlandProvider(tmpDir)
if err := provider.SetBind("SUPER + WheelScrollDown", "workspace 1", "", nil); err != nil {
t.Fatal(err)
}
got := readFile(t, bindsUser)
if !strings.Contains(got, `hl.bind("SUPER + mouse_down"`) {
t.Fatalf("expected scroll key translated to mouse_down, got:\n%s", got)
}
if strings.Contains(got, "WheelScroll") {
t.Fatalf("expected no raw niri scroll keysym in hyprland output, got:\n%s", got)
}
if err := provider.SetBind("SUPER + WheelScrollDown", "workspace 2", "", nil); err != nil {
t.Fatal(err)
}
got = readFile(t, bindsUser)
if strings.Count(got, `hl.bind("SUPER + mouse_down"`) != 1 {
t.Fatalf("expected exactly one mouse_down bind after re-save, got:\n%s", got)
}
}
func TestHyprlandScrollWheelRoundTrips(t *testing.T) {
for native, canonical := range map[string]string{
"mouse_up": "WheelScrollUp",
"mouse_down": "WheelScrollDown",
"mouse_left": "WheelScrollLeft",
"mouse_right": "WheelScrollRight",
} {
if got := luaKeyComboToInternalKey("SUPER + " + native); got != "SUPER+"+canonical {
t.Errorf("luaKeyComboToInternalKey(%q) = %q, want SUPER+%s", native, got, canonical)
}
}
}
func readFile(t *testing.T, path string) string {
t.Helper()
data, err := os.ReadFile(path)
if err != nil {
t.Fatal(err)
}
return string(data)
}
func TestHyprlandRemoveBindReplacesExistingOverrideWithNegativeOverride(t *testing.T) {
tmpDir := t.TempDir()
dmsDir := filepath.Join(tmpDir, "dms")
@@ -236,9 +236,6 @@ func (m *MangoWCProvider) SetBind(key, action, description string, options map[s
if optionPrefix := m.bindPrefixFromOptions(options); optionPrefix != "" {
prefix = optionPrefix
}
if _, leaf := m.parseKeyString(key); isScrollKey(leaf) {
prefix = mangowcAxisBindPrefix
}
existingBinds[normalizedKey] = &mangowcOverrideBind{
Key: key,
@@ -349,12 +346,6 @@ func (m *MangoWCProvider) parseOverrideBindLine(line, precedingComment string) (
keyName := strings.TrimSpace(fields[1])
command := strings.TrimSpace(fields[2])
if prefix == mangowcAxisBindPrefix {
if canonical, ok := mangowcDirectionToScroll(keyName); ok {
keyName = canonical
}
}
var params string
if len(fields) > 3 {
params = strings.TrimSpace(fields[3])
@@ -374,9 +365,6 @@ func (m *MangoWCProvider) parseOverrideBindLine(line, precedingComment string) (
}
func (m *MangoWCProvider) isBindPrefix(prefix string) bool {
if prefix == mangowcAxisBindPrefix {
return true
}
if !strings.HasPrefix(prefix, "bind") {
return false
}
@@ -603,11 +591,6 @@ func (m *MangoWCProvider) writeBindLine(sb *strings.Builder, bind *mangowcOverri
if prefix == "" {
prefix = "bind"
}
if prefix == mangowcAxisBindPrefix {
if direction, ok := mangowcScrollToDirection(key); ok {
key = direction
}
}
sb.WriteString(prefix)
sb.WriteString("=")
if mods == "" {
@@ -244,7 +244,7 @@ func (p *MangoWCParser) ParseKeys() []MangoWCKeyBinding {
}
continue
}
if !strings.HasPrefix(trimmed, "bind") && !strings.HasPrefix(trimmed, mangowcAxisBindPrefix) {
if !strings.HasPrefix(trimmed, "bind") {
pendingComment = ""
continue
}
@@ -427,7 +427,7 @@ func (p *MangoWCParser) parseFileWithSource(filePath string) ([]MangoWCKeyBindin
continue
}
if !strings.HasPrefix(trimmed, "bind") && !strings.HasPrefix(trimmed, mangowcAxisBindPrefix) {
if !strings.HasPrefix(trimmed, "bind") {
pendingComment = ""
continue
}
@@ -493,7 +493,7 @@ func (p *MangoWCParser) parseDMSBindsDirectly(dmsBindsPath string) []MangoWCKeyB
// line directly above) is the description: mango feeds inline comments to spawn
// as argv, so DMS keeps descriptions on the line above; inline `#` is a fallback.
func (p *MangoWCParser) getKeybindAtLineContent(line string, precedingComment string) *MangoWCKeyBinding {
bindMatch := regexp.MustCompile(`^(bind[lsrp]*|axisbind)\s*=\s*(.+)$`)
bindMatch := regexp.MustCompile(`^(bind[lsrp]*)\s*=\s*(.+)$`)
matches := bindMatch.FindStringSubmatch(line)
if len(matches) < 3 {
return nil
@@ -527,12 +527,6 @@ func (p *MangoWCParser) getKeybindAtLineContent(line string, precedingComment st
key := strings.TrimSpace(keyFields[1])
command := strings.TrimSpace(keyFields[2])
if matches[1] == mangowcAxisBindPrefix {
if canonical, ok := mangowcDirectionToScroll(key); ok {
key = canonical
}
}
var params string
if len(keyFields) > 3 {
params = strings.TrimSpace(keyFields[3])
@@ -6,29 +6,6 @@ import (
"testing"
)
func TestMangoWCParseAxisBindToScrollKey(t *testing.T) {
tmpDir := t.TempDir()
cfg := filepath.Join(tmpDir, "config.conf")
content := "axisbind=SUPER,UP,spawn,dms ipc call test\n"
if err := os.WriteFile(cfg, []byte(content), 0o644); err != nil {
t.Fatal(err)
}
binds, err := ParseMangoWCKeys(cfg)
if err != nil {
t.Fatalf("ParseMangoWCKeys failed: %v", err)
}
if len(binds) != 1 {
t.Fatalf("expected 1 bind, got %d", len(binds))
}
if binds[0].Key != "WheelScrollUp" {
t.Fatalf("expected axis direction parsed as WheelScrollUp, got %q", binds[0].Key)
}
if len(binds[0].Mods) != 1 || binds[0].Mods[0] != "SUPER" {
t.Fatalf("expected SUPER mod, got %v", binds[0].Mods)
}
}
func TestMangoWCAutogenerateComment(t *testing.T) {
tests := []struct {
command string
@@ -417,40 +417,6 @@ bind=SUPER,3,view,3
}
}
func TestMangoWCSetBindTranslatesScrollWheelToAxisBind(t *testing.T) {
tmpDir := t.TempDir()
dmsDir := filepath.Join(tmpDir, "dms")
if err := os.MkdirAll(dmsDir, 0o755); err != nil {
t.Fatalf("failed to create dms dir: %v", err)
}
bindsPath := filepath.Join(dmsDir, "binds.conf")
seed := "# === Custom Keybinds ===\nbind=SUPER,t,spawn,ghostty\ngesturebind=none,left,3,focusdir,left\n"
if err := os.WriteFile(bindsPath, []byte(seed), 0o644); err != nil {
t.Fatalf("failed to write seed binds: %v", err)
}
provider := NewMangoWCProvider(tmpDir)
if err := provider.SetBind("SUPER+WheelScrollDown", "spawn dms ipc call test", "Scroll down", nil); err != nil {
t.Fatalf("SetBind failed: %v", err)
}
content := readFile(t, bindsPath)
if !strings.Contains(content, "axisbind=SUPER,DOWN,spawn,dms ipc call test") {
t.Fatalf("expected scroll bind written as axisbind direction, got:\n%s", content)
}
if strings.Contains(content, "WheelScroll") {
t.Fatalf("expected no raw niri scroll keysym in mango output, got:\n%s", content)
}
if err := provider.SetBind("SUPER+WheelScrollDown", "spawn dms ipc call test2", "Scroll down", nil); err != nil {
t.Fatalf("SetBind failed: %v", err)
}
content = readFile(t, bindsPath)
if strings.Count(content, "axisbind=SUPER,DOWN,") != 1 {
t.Fatalf("expected exactly one axisbind after re-save, got:\n%s", content)
}
}
func TestMangoWCRemoveBindPreservesNonBindLines(t *testing.T) {
tmpDir := t.TempDir()
dmsDir := filepath.Join(tmpDir, "dms")
@@ -51,7 +51,7 @@ type NiriParser struct {
}
func parseKDL(data []byte) (*document.Document, error) {
return kdl.Parse(strings.NewReader(normalizeKDLBraces(quoteLeadingUnderscoreIdents(string(data)))))
return kdl.Parse(strings.NewReader(normalizeKDLBraces(string(data))))
}
func normalizeKDLBraces(input string) string {
@@ -94,93 +94,6 @@ func normalizeKDLBraces(input string) string {
return sb.String()
}
// quoteLeadingUnderscoreIdents wraps bare KDL identifiers that begin with '_'
// in double quotes. kdl-go rejects '_' as the first character of a bare
// identifier (e.g. the common `_JAVA_AWT_WM_NONREPARENTING "1"` environment
// node), even though niri's own parser and the KDL spec accept it — so without
// this the whole config fails to parse and no keybinds load. Quoting lets
// kdl-go parse it; this is safe because the niri parser only dispatches on
// fixed node/section names (binds, recent-windows, include, ...) that never
// start with '_', so re-quoting such a name cannot change what DMS reads.
// Underscores elsewhere in an identifier (XDG_CURRENT_DESKTOP) are left
// untouched, and underscores inside strings or comments are skipped. Only a
// leading '_' is handled; other start characters kdl-go over-rejects (e.g. '.'
// or '?') do not occur in niri configs.
func quoteLeadingUnderscoreIdents(input string) string {
var sb strings.Builder
sb.Grow(len(input))
var prev byte
n := len(input)
for i := 0; i < n; {
c := input[i]
switch {
case c == '"':
end := findStringEnd(input, i)
sb.WriteString(input[i:end])
prev = '"'
i = end
case c == '/' && i+1 < n && input[i+1] == '/':
end := findLineCommentEnd(input, i)
sb.WriteString(input[i:end])
prev = '\n'
i = end
case c == '/' && i+1 < n && input[i+1] == '*':
end := findBlockCommentEnd(input, i)
sb.WriteString(input[i:end])
prev = ' '
i = end
case c == '/' && i+1 < n && input[i+1] == '-':
// KDL slashdash: /- comments out the next node/value. Keep the
// marker but treat what follows as a fresh token start, so a
// slashdashed leading-underscore node (e.g. `/-_FOO "1"`) still
// gets quoted instead of crashing kdl-go.
sb.WriteByte('/')
sb.WriteByte('-')
prev = ' '
i += 2
case c == '_' && isIdentBoundary(prev):
end := scanBareIdent(input, i)
sb.WriteByte('"')
sb.WriteString(input[i:end])
sb.WriteByte('"')
prev = '"'
i = end
default:
sb.WriteByte(c)
prev = c
i++
}
}
return sb.String()
}
// isIdentBoundary reports whether the previously emitted byte ends a token, so
// that a following '_' starts a fresh bare identifier rather than sitting in
// the middle of one.
func isIdentBoundary(prev byte) bool {
switch prev {
case 0, ' ', '\t', '\n', '\r', '{', '}', ';', '=', '(', ')', ',':
return true
}
return false
}
// scanBareIdent returns the index just past the bare identifier starting at
// start, stopping at whitespace or any KDL delimiter.
func scanBareIdent(s string, start int) int {
n := len(s)
for i := start; i < n; i++ {
switch s[i] {
case ' ', '\t', '\n', '\r', '"', '{', '}', '(', ')', ';', '=', ',', '/', '\\', '<', '>', '[', ']':
return i
}
}
return n
}
func findStringEnd(s string, start int) int {
n := len(s)
for i := start + 1; i < n; {
@@ -71,101 +71,6 @@ func TestNormalizeKDLBraces(t *testing.T) {
}
}
func TestQuoteLeadingUnderscoreIdents(t *testing.T) {
tests := []struct {
name string
in string
out string
}{
{"leading underscore node", `_JAVA_AWT_WM_NONREPARENTING "1"`, `"_JAVA_AWT_WM_NONREPARENTING" "1"`},
{"mid underscore untouched", `XDG_CURRENT_DESKTOP "niri"`, `XDG_CURRENT_DESKTOP "niri"`},
{"indented node", "environment {\n _FOO \"1\"\n}", "environment {\n \"_FOO\" \"1\"\n}"},
{"underscore in string", `spawn "_not_a_node"`, `spawn "_not_a_node"`},
{"underscore in line comment", "// _comment\n_FOO \"1\"", "// _comment\n\"_FOO\" \"1\""},
{"underscore in block comment", "/* _x */ _FOO \"1\"", "/* _x */ \"_FOO\" \"1\""},
{"block comment abuts node", `/* x */_FOO "1"`, `/* x */"_FOO" "1"`},
{"slashdash before node", `/-_FOO "1"`, `/-"_FOO" "1"`},
{"node after closing paren", "node (u8)_v", `node (u8)"_v"`},
{"node before brace without space", "_FOO{ }", `"_FOO"{ }`},
{"lone underscore", `_ "x"`, `"_" "x"`},
{"property value", "node key=_val", `node key="_val"`},
{"no underscores", "node child", "node child"},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
got := quoteLeadingUnderscoreIdents(tc.in)
if got != tc.out {
t.Errorf("quoteLeadingUnderscoreIdents(%q) = %q, want %q", tc.in, got, tc.out)
}
})
}
}
func TestNiriParseLeadingUnderscoreEnvironment(t *testing.T) {
tmpDir := t.TempDir()
configFile := filepath.Join(tmpDir, "config.kdl")
// A leading-underscore environment node (a common Java/tiling-WM fix) must
// not abort parsing of the rest of the config — keybinds still have to load.
content := `environment {
XDG_CURRENT_DESKTOP "niri"
_JAVA_AWT_WM_NONREPARENTING "1"
}
binds {
Mod+Q { close-window; }
Mod+KP_Home { focus-workspace 1; }
}
`
if err := os.WriteFile(configFile, []byte(content), 0o644); err != nil {
t.Fatalf("Failed to write test config: %v", err)
}
result, err := ParseNiriKeys(tmpDir)
if err != nil {
t.Fatalf("ParseNiriKeys failed on config with leading-underscore env node: %v", err)
}
if len(result.Section.Keybinds) != 2 {
t.Errorf("Expected 2 keybinds, got %d", len(result.Section.Keybinds))
}
foundClose := false
for _, kb := range result.Section.Keybinds {
if kb.Action == "close-window" {
foundClose = true
}
}
if !foundClose {
t.Error("close-window keybind not found — leading-underscore env node broke parsing")
}
}
func TestNiriParseSlashdashLeadingUnderscore(t *testing.T) {
tmpDir := t.TempDir()
configFile := filepath.Join(tmpDir, "config.kdl")
// A slashdashed leading-underscore node must not abort parsing either.
content := `environment {
/-_JAVA_AWT_WM_NONREPARENTING "1"
}
binds {
Mod+Q { close-window; }
}
`
if err := os.WriteFile(configFile, []byte(content), 0o644); err != nil {
t.Fatalf("Failed to write test config: %v", err)
}
result, err := ParseNiriKeys(tmpDir)
if err != nil {
t.Fatalf("ParseNiriKeys failed on config with slashdashed leading-underscore node: %v", err)
}
if len(result.Section.Keybinds) != 1 {
t.Errorf("Expected 1 keybind, got %d", len(result.Section.Keybinds))
}
}
func TestNiriParseKeyCombo(t *testing.T) {
tests := []struct {
combo string
@@ -1,74 +0,0 @@
package providers
import "strings"
// Scroll-wheel binds are captured by the shell as niri's keysym names
// (WheelScrollUp/Down/Left/Right) regardless of the active compositor. Niri
// consumes them natively; every other provider speaks a different dialect, so the
// raw niri token must be translated on write and back again on read. Without this
// the token is emitted verbatim and the compositor rejects the bind (issue #2683).
var canonicalScrollKeys = map[string]string{
"wheelscrollup": "WheelScrollUp",
"wheelscrolldown": "WheelScrollDown",
"wheelscrollleft": "WheelScrollLeft",
"wheelscrollright": "WheelScrollRight",
}
func isScrollKey(token string) bool {
_, ok := canonicalScrollKeys[strings.ToLower(token)]
return ok
}
// Hyprland binds the wheel inside a regular bind using mouse_up/down/left/right.
var hyprlandScrollNative = map[string]string{
"wheelscrollup": "mouse_up",
"wheelscrolldown": "mouse_down",
"wheelscrollleft": "mouse_left",
"wheelscrollright": "mouse_right",
}
var hyprlandScrollCanonical = map[string]string{
"mouse_up": "WheelScrollUp",
"mouse_down": "WheelScrollDown",
"mouse_left": "WheelScrollLeft",
"mouse_right": "WheelScrollRight",
}
func hyprlandScrollToNative(token string) (string, bool) {
v, ok := hyprlandScrollNative[strings.ToLower(token)]
return v, ok
}
func hyprlandScrollToCanonical(token string) (string, bool) {
v, ok := hyprlandScrollCanonical[strings.ToLower(token)]
return v, ok
}
// MangoWC binds the wheel through a dedicated axisbind directive whose key field
// is a direction (UP/DOWN/LEFT/RIGHT) rather than a keysym.
const mangowcAxisBindPrefix = "axisbind"
var mangowcScrollDirection = map[string]string{
"wheelscrollup": "UP",
"wheelscrolldown": "DOWN",
"wheelscrollleft": "LEFT",
"wheelscrollright": "RIGHT",
}
var mangowcScrollCanonical = map[string]string{
"up": "WheelScrollUp",
"down": "WheelScrollDown",
"left": "WheelScrollLeft",
"right": "WheelScrollRight",
}
func mangowcScrollToDirection(token string) (string, bool) {
v, ok := mangowcScrollDirection[strings.ToLower(token)]
return v, ok
}
func mangowcDirectionToScroll(direction string) (string, bool) {
v, ok := mangowcScrollCanonical[strings.ToLower(direction)]
return v, ok
}
+4 -70
View File
@@ -47,14 +47,13 @@ type TemplateDef struct {
ConfigFile string
Kind TemplateKind
RunUnconditionally bool
RequiredEnv string
}
var templateRegistry = []TemplateDef{
{ID: "gtk", Kind: TemplateKindGTK, RunUnconditionally: true},
{ID: "niri", Commands: []string{"niri"}, ConfigFile: "niri.toml"},
{ID: "hyprland", Commands: []string{"Hyprland"}, ConfigFile: "hyprland.toml"},
{ID: "mangowc", Commands: []string{"mango"}, ConfigFile: "mangowc.toml", RequiredEnv: "MANGO_INSTANCE_SIGNATURE"},
{ID: "mangowc", Commands: []string{"mango"}, ConfigFile: "mangowc.toml"},
{ID: "qt5ct", Commands: []string{"qt5ct"}, ConfigFile: "qt5ct.toml"},
{ID: "qt6ct", Commands: []string{"qt6ct"}, ConfigFile: "qt6ct.toml"},
{ID: "firefox", Commands: []string{"firefox"}, ConfigFile: "firefox.toml"},
@@ -122,10 +121,6 @@ func (o *Options) ColorsOutput() string {
return filepath.Join(o.StateDir, "dms-colors.json")
}
func (o *Options) colorsStaging() string {
return o.ColorsOutput() + ".tmp"
}
func (o *Options) ShouldSkipTemplate(name string) bool {
if o.SkipTemplates == "" {
return false
@@ -138,38 +133,6 @@ func (o *Options) ShouldSkipTemplate(name string) bool {
return false
}
func acquireMatugenLock(stateDir string) (*os.File, error) {
f, err := os.OpenFile(filepath.Join(stateDir, "matugen.lock"), os.O_CREATE|os.O_RDWR, 0o644)
if err != nil {
return nil, fmt.Errorf("failed to open matugen lock: %w", err)
}
deadline := time.Now().Add(45 * time.Second)
for {
switch err := syscall.Flock(int(f.Fd()), syscall.LOCK_EX|syscall.LOCK_NB); err {
case nil:
return f, nil
case syscall.EWOULDBLOCK:
if time.Now().After(deadline) {
f.Close()
return nil, fmt.Errorf("timed out waiting for matugen lock")
}
time.Sleep(100 * time.Millisecond)
default:
f.Close()
return nil, fmt.Errorf("failed to lock matugen: %w", err)
}
}
}
func releaseMatugenLock(f *os.File) {
if f == nil {
return
}
_ = syscall.Flock(int(f.Fd()), syscall.LOCK_UN)
f.Close()
}
func Run(opts Options) error {
if opts.StateDir == "" {
return fmt.Errorf("state-dir is required")
@@ -203,12 +166,6 @@ func Run(opts Options) error {
return fmt.Errorf("failed to create state dir: %w", err)
}
lock, err := acquireMatugenLock(opts.StateDir)
if err != nil {
return err
}
defer releaseMatugenLock(lock)
log.Infof("Building theme: %s %s (%s)", opts.Kind, opts.Value, opts.Mode)
changed, buildErr := buildOnce(&opts)
@@ -230,8 +187,6 @@ func Run(opts Options) error {
}
func buildOnce(opts *Options) (bool, error) {
defer os.Remove(opts.colorsStaging())
cfgFile, err := os.CreateTemp("", "matugen-config-*.toml")
if err != nil {
return false, fmt.Errorf("failed to create temp config: %w", err)
@@ -319,16 +274,10 @@ func buildOnce(opts *Options) (bool, error) {
}
}
newColors, err := os.ReadFile(opts.colorsStaging())
if err != nil {
return false, fmt.Errorf("matugen did not produce colors output: %w", err)
}
newColors, _ := os.ReadFile(opts.ColorsOutput())
if bytes.Equal(oldColors, newColors) && len(oldColors) > 0 {
return false, nil
}
if err := os.Rename(opts.colorsStaging(), opts.ColorsOutput()); err != nil {
return false, fmt.Errorf("failed to commit colors output: %w", err)
}
if opts.ColorsOnly {
return true, nil
@@ -396,7 +345,7 @@ func buildMergedConfig(opts *Options, cfgFile *os.File, tmpDir string) error {
input_path = '%s/matugen/templates/dank.json'
output_path = '%s'
`, opts.ShellDir, opts.colorsStaging())
`, opts.ShellDir, opts.ColorsOutput())
if opts.ColorsOnly {
return nil
@@ -407,9 +356,6 @@ output_path = '%s'
if opts.ShouldSkipTemplate(tmpl.ID) {
continue
}
if !templateSessionActive(tmpl) {
continue
}
switch tmpl.Kind {
case TemplateKindGTK:
@@ -543,18 +489,6 @@ func appendTerminalConfig(opts *Options, cfgFile *os.File, tmpDir string, checkC
cfgFile.WriteString("\n")
}
func templateSessionActive(tmpl TemplateDef) bool {
if tmpl.RequiredEnv == "" {
return true
}
socket := os.Getenv(tmpl.RequiredEnv)
if socket == "" {
return false
}
_, err := os.Stat(socket)
return err == nil
}
func appExists(checker utils.AppChecker, checkCmd []string, checkFlatpaks []string) bool {
// Both nil is treated as "skip check" / unconditionally run
if checkCmd == nil && checkFlatpaks == nil {
@@ -1017,7 +951,7 @@ func CheckTemplates(checker utils.AppChecker) []TemplateCheck {
case tmpl.Kind == TemplateKindEmacs:
detected = appExists(checker, tmpl.Commands, tmpl.Flatpaks) && utils.EmacsConfigDir() != ""
default:
detected = appExists(checker, tmpl.Commands, tmpl.Flatpaks) && templateSessionActive(tmpl)
detected = appExists(checker, tmpl.Commands, tmpl.Flatpaks)
}
checks = append(checks, TemplateCheck{ID: tmpl.ID, Detected: detected})
+1 -47
View File
@@ -437,53 +437,7 @@ func TestBuildMergedConfigColorsOnly(t *testing.T) {
content := string(output)
assert.Contains(t, content, "[templates.dank]")
assert.Contains(t, content, "output_path = '"+opts.colorsStaging()+"'")
assert.Contains(t, content, "output_path = '"+filepath.Join(opts.StateDir, "dms-colors.json")+"'")
assert.NotContains(t, content, "[templates.gtk]")
assert.False(t, strings.Contains(content, "output_path = 'CONFIG_DIR/"), "colors-only config should not emit app template outputs")
}
func TestBuildMergedConfigSkipsMangowcWithoutActiveSession(t *testing.T) {
t.Setenv("MANGO_INSTANCE_SIGNATURE", "")
tempDir := t.TempDir()
shellDir := filepath.Join(tempDir, "shell")
configsDir := filepath.Join(shellDir, "matugen", "configs")
if err := os.MkdirAll(configsDir, 0o755); err != nil {
t.Fatalf("failed to create configs dir: %v", err)
}
if err := os.WriteFile(filepath.Join(configsDir, "base.toml"), []byte("[config]\n"), 0o644); err != nil {
t.Fatalf("failed to write base config: %v", err)
}
mangowcConfig := "[templates.dmsmango]\ninput_path = 'in'\noutput_path = 'out'\n"
if err := os.WriteFile(filepath.Join(configsDir, "mangowc.toml"), []byte(mangowcConfig), 0o644); err != nil {
t.Fatalf("failed to write mangowc config: %v", err)
}
cfgFile, err := os.CreateTemp(tempDir, "merged-*.toml")
if err != nil {
t.Fatalf("failed to create temp config: %v", err)
}
defer os.Remove(cfgFile.Name())
defer cfgFile.Close()
opts := &Options{
ShellDir: shellDir,
ConfigDir: filepath.Join(tempDir, "config"),
StateDir: filepath.Join(tempDir, "state"),
SkipTemplates: "gtk,niri,hyprland,qt5ct,qt6ct,firefox,pywalfox,zenbrowser,vesktop,vencord,equibop,ghostty,kitty,foot,alacritty,wezterm,nvim,dgop,kcolorscheme,vscode,emacs,zed",
}
if err := buildMergedConfig(opts, cfgFile, filepath.Join(tempDir, "templates")); err != nil {
t.Fatalf("buildMergedConfig failed: %v", err)
}
if err := cfgFile.Close(); err != nil {
t.Fatalf("failed to close merged config: %v", err)
}
output, err := os.ReadFile(cfgFile.Name())
if err != nil {
t.Fatalf("failed to read merged config: %v", err)
}
assert.NotContains(t, string(output), "[templates.dmsmango]")
}
+35 -45
View File
@@ -1,28 +1,12 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package mocks_brightness
import (
"github.com/godbus/dbus/v5"
dbus "github.com/godbus/dbus/v5"
mock "github.com/stretchr/testify/mock"
)
// NewMockDBusConn creates a new instance of MockDBusConn. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockDBusConn(t interface {
mock.TestingT
Cleanup(func())
}) *MockDBusConn {
mock := &MockDBusConn{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockDBusConn is an autogenerated mock type for the DBusConn type
type MockDBusConn struct {
mock.Mock
@@ -36,20 +20,21 @@ func (_m *MockDBusConn) EXPECT() *MockDBusConn_Expecter {
return &MockDBusConn_Expecter{mock: &_m.Mock}
}
// Close provides a mock function for the type MockDBusConn
func (_mock *MockDBusConn) Close() error {
ret := _mock.Called()
// Close provides a mock function with no fields
func (_m *MockDBusConn) Close() error {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Close")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func() error); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() error); ok {
r0 = rf()
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -70,8 +55,8 @@ func (_c *MockDBusConn_Close_Call) Run(run func()) *MockDBusConn_Close_Call {
return _c
}
func (_c *MockDBusConn_Close_Call) Return(err error) *MockDBusConn_Close_Call {
_c.Call.Return(err)
func (_c *MockDBusConn_Close_Call) Return(_a0 error) *MockDBusConn_Close_Call {
_c.Call.Return(_a0)
return _c
}
@@ -80,22 +65,23 @@ func (_c *MockDBusConn_Close_Call) RunAndReturn(run func() error) *MockDBusConn_
return _c
}
// Object provides a mock function for the type MockDBusConn
func (_mock *MockDBusConn) Object(dest string, path dbus.ObjectPath) dbus.BusObject {
ret := _mock.Called(dest, path)
// Object provides a mock function with given fields: dest, path
func (_m *MockDBusConn) Object(dest string, path dbus.ObjectPath) dbus.BusObject {
ret := _m.Called(dest, path)
if len(ret) == 0 {
panic("no return value specified for Object")
}
var r0 dbus.BusObject
if returnFunc, ok := ret.Get(0).(func(string, dbus.ObjectPath) dbus.BusObject); ok {
r0 = returnFunc(dest, path)
if rf, ok := ret.Get(0).(func(string, dbus.ObjectPath) dbus.BusObject); ok {
r0 = rf(dest, path)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(dbus.BusObject)
}
}
return r0
}
@@ -113,28 +99,32 @@ func (_e *MockDBusConn_Expecter) Object(dest any, path any) *MockDBusConn_Object
func (_c *MockDBusConn_Object_Call) Run(run func(dest string, path dbus.ObjectPath)) *MockDBusConn_Object_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 dbus.ObjectPath
if args[1] != nil {
arg1 = args[1].(dbus.ObjectPath)
}
run(
arg0,
arg1,
)
run(args[0].(string), args[1].(dbus.ObjectPath))
})
return _c
}
func (_c *MockDBusConn_Object_Call) Return(busObject dbus.BusObject) *MockDBusConn_Object_Call {
_c.Call.Return(busObject)
func (_c *MockDBusConn_Object_Call) Return(_a0 dbus.BusObject) *MockDBusConn_Object_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockDBusConn_Object_Call) RunAndReturn(run func(dest string, path dbus.ObjectPath) dbus.BusObject) *MockDBusConn_Object_Call {
func (_c *MockDBusConn_Object_Call) RunAndReturn(run func(string, dbus.ObjectPath) dbus.BusObject) *MockDBusConn_Object_Call {
_c.Call.Return(run)
return _c
}
// NewMockDBusConn creates a new instance of MockDBusConn. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockDBusConn(t interface {
mock.TestingT
Cleanup(func())
},
) *MockDBusConn {
mock := &MockDBusConn{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
File diff suppressed because it is too large Load Diff
+175 -331
View File
@@ -1,28 +1,12 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package mocks_cups_pkhelper
import (
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/cups"
cups "github.com/AvengeMedia/DankMaterialShell/core/internal/server/cups"
mock "github.com/stretchr/testify/mock"
)
// NewMockPkHelper creates a new instance of MockPkHelper. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockPkHelper(t interface {
mock.TestingT
Cleanup(func())
}) *MockPkHelper {
mock := &MockPkHelper{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockPkHelper is an autogenerated mock type for the PkHelper type
type MockPkHelper struct {
mock.Mock
@@ -36,20 +20,21 @@ func (_m *MockPkHelper) EXPECT() *MockPkHelper_Expecter {
return &MockPkHelper_Expecter{mock: &_m.Mock}
}
// ClassAddPrinter provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) ClassAddPrinter(className string, printerName string) error {
ret := _mock.Called(className, printerName)
// ClassAddPrinter provides a mock function with given fields: className, printerName
func (_m *MockPkHelper) ClassAddPrinter(className string, printerName string) error {
ret := _m.Called(className, printerName)
if len(ret) == 0 {
panic("no return value specified for ClassAddPrinter")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string, string) error); ok {
r0 = returnFunc(className, printerName)
if rf, ok := ret.Get(0).(func(string, string) error); ok {
r0 = rf(className, printerName)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -61,52 +46,42 @@ type MockPkHelper_ClassAddPrinter_Call struct {
// ClassAddPrinter is a helper method to define mock.On call
// - className string
// - printerName string
func (_e *MockPkHelper_Expecter) ClassAddPrinter(className any, printerName any) *MockPkHelper_ClassAddPrinter_Call {
func (_e *MockPkHelper_Expecter) ClassAddPrinter(className interface{}, printerName interface{}) *MockPkHelper_ClassAddPrinter_Call {
return &MockPkHelper_ClassAddPrinter_Call{Call: _e.mock.On("ClassAddPrinter", className, printerName)}
}
func (_c *MockPkHelper_ClassAddPrinter_Call) Run(run func(className string, printerName string)) *MockPkHelper_ClassAddPrinter_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
run(
arg0,
arg1,
)
run(args[0].(string), args[1].(string))
})
return _c
}
func (_c *MockPkHelper_ClassAddPrinter_Call) Return(err error) *MockPkHelper_ClassAddPrinter_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_ClassAddPrinter_Call) Return(_a0 error) *MockPkHelper_ClassAddPrinter_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_ClassAddPrinter_Call) RunAndReturn(run func(className string, printerName string) error) *MockPkHelper_ClassAddPrinter_Call {
func (_c *MockPkHelper_ClassAddPrinter_Call) RunAndReturn(run func(string, string) error) *MockPkHelper_ClassAddPrinter_Call {
_c.Call.Return(run)
return _c
}
// ClassDelete provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) ClassDelete(className string) error {
ret := _mock.Called(className)
// ClassDelete provides a mock function with given fields: className
func (_m *MockPkHelper) ClassDelete(className string) error {
ret := _m.Called(className)
if len(ret) == 0 {
panic("no return value specified for ClassDelete")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string) error); ok {
r0 = returnFunc(className)
if rf, ok := ret.Get(0).(func(string) error); ok {
r0 = rf(className)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -117,47 +92,42 @@ type MockPkHelper_ClassDelete_Call struct {
// ClassDelete is a helper method to define mock.On call
// - className string
func (_e *MockPkHelper_Expecter) ClassDelete(className any) *MockPkHelper_ClassDelete_Call {
func (_e *MockPkHelper_Expecter) ClassDelete(className interface{}) *MockPkHelper_ClassDelete_Call {
return &MockPkHelper_ClassDelete_Call{Call: _e.mock.On("ClassDelete", className)}
}
func (_c *MockPkHelper_ClassDelete_Call) Run(run func(className string)) *MockPkHelper_ClassDelete_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockPkHelper_ClassDelete_Call) Return(err error) *MockPkHelper_ClassDelete_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_ClassDelete_Call) Return(_a0 error) *MockPkHelper_ClassDelete_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_ClassDelete_Call) RunAndReturn(run func(className string) error) *MockPkHelper_ClassDelete_Call {
func (_c *MockPkHelper_ClassDelete_Call) RunAndReturn(run func(string) error) *MockPkHelper_ClassDelete_Call {
_c.Call.Return(run)
return _c
}
// ClassDeletePrinter provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) ClassDeletePrinter(className string, printerName string) error {
ret := _mock.Called(className, printerName)
// ClassDeletePrinter provides a mock function with given fields: className, printerName
func (_m *MockPkHelper) ClassDeletePrinter(className string, printerName string) error {
ret := _m.Called(className, printerName)
if len(ret) == 0 {
panic("no return value specified for ClassDeletePrinter")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string, string) error); ok {
r0 = returnFunc(className, printerName)
if rf, ok := ret.Get(0).(func(string, string) error); ok {
r0 = rf(className, printerName)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -169,41 +139,30 @@ type MockPkHelper_ClassDeletePrinter_Call struct {
// ClassDeletePrinter is a helper method to define mock.On call
// - className string
// - printerName string
func (_e *MockPkHelper_Expecter) ClassDeletePrinter(className any, printerName any) *MockPkHelper_ClassDeletePrinter_Call {
func (_e *MockPkHelper_Expecter) ClassDeletePrinter(className interface{}, printerName interface{}) *MockPkHelper_ClassDeletePrinter_Call {
return &MockPkHelper_ClassDeletePrinter_Call{Call: _e.mock.On("ClassDeletePrinter", className, printerName)}
}
func (_c *MockPkHelper_ClassDeletePrinter_Call) Run(run func(className string, printerName string)) *MockPkHelper_ClassDeletePrinter_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
run(
arg0,
arg1,
)
run(args[0].(string), args[1].(string))
})
return _c
}
func (_c *MockPkHelper_ClassDeletePrinter_Call) Return(err error) *MockPkHelper_ClassDeletePrinter_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_ClassDeletePrinter_Call) Return(_a0 error) *MockPkHelper_ClassDeletePrinter_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_ClassDeletePrinter_Call) RunAndReturn(run func(className string, printerName string) error) *MockPkHelper_ClassDeletePrinter_Call {
func (_c *MockPkHelper_ClassDeletePrinter_Call) RunAndReturn(run func(string, string) error) *MockPkHelper_ClassDeletePrinter_Call {
_c.Call.Return(run)
return _c
}
// DevicesGet provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) DevicesGet(timeout int, limit int, includeSchemes []string, excludeSchemes []string) ([]cups.Device, error) {
ret := _mock.Called(timeout, limit, includeSchemes, excludeSchemes)
// DevicesGet provides a mock function with given fields: timeout, limit, includeSchemes, excludeSchemes
func (_m *MockPkHelper) DevicesGet(timeout int, limit int, includeSchemes []string, excludeSchemes []string) ([]cups.Device, error) {
ret := _m.Called(timeout, limit, includeSchemes, excludeSchemes)
if len(ret) == 0 {
panic("no return value specified for DevicesGet")
@@ -211,21 +170,23 @@ func (_mock *MockPkHelper) DevicesGet(timeout int, limit int, includeSchemes []s
var r0 []cups.Device
var r1 error
if returnFunc, ok := ret.Get(0).(func(int, int, []string, []string) ([]cups.Device, error)); ok {
return returnFunc(timeout, limit, includeSchemes, excludeSchemes)
if rf, ok := ret.Get(0).(func(int, int, []string, []string) ([]cups.Device, error)); ok {
return rf(timeout, limit, includeSchemes, excludeSchemes)
}
if returnFunc, ok := ret.Get(0).(func(int, int, []string, []string) []cups.Device); ok {
r0 = returnFunc(timeout, limit, includeSchemes, excludeSchemes)
if rf, ok := ret.Get(0).(func(int, int, []string, []string) []cups.Device); ok {
r0 = rf(timeout, limit, includeSchemes, excludeSchemes)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]cups.Device)
}
}
if returnFunc, ok := ret.Get(1).(func(int, int, []string, []string) error); ok {
r1 = returnFunc(timeout, limit, includeSchemes, excludeSchemes)
if rf, ok := ret.Get(1).(func(int, int, []string, []string) error); ok {
r1 = rf(timeout, limit, includeSchemes, excludeSchemes)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -239,62 +200,42 @@ type MockPkHelper_DevicesGet_Call struct {
// - limit int
// - includeSchemes []string
// - excludeSchemes []string
func (_e *MockPkHelper_Expecter) DevicesGet(timeout any, limit any, includeSchemes any, excludeSchemes any) *MockPkHelper_DevicesGet_Call {
func (_e *MockPkHelper_Expecter) DevicesGet(timeout interface{}, limit interface{}, includeSchemes interface{}, excludeSchemes interface{}) *MockPkHelper_DevicesGet_Call {
return &MockPkHelper_DevicesGet_Call{Call: _e.mock.On("DevicesGet", timeout, limit, includeSchemes, excludeSchemes)}
}
func (_c *MockPkHelper_DevicesGet_Call) Run(run func(timeout int, limit int, includeSchemes []string, excludeSchemes []string)) *MockPkHelper_DevicesGet_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 int
if args[0] != nil {
arg0 = args[0].(int)
}
var arg1 int
if args[1] != nil {
arg1 = args[1].(int)
}
var arg2 []string
if args[2] != nil {
arg2 = args[2].([]string)
}
var arg3 []string
if args[3] != nil {
arg3 = args[3].([]string)
}
run(
arg0,
arg1,
arg2,
arg3,
)
run(args[0].(int), args[1].(int), args[2].([]string), args[3].([]string))
})
return _c
}
func (_c *MockPkHelper_DevicesGet_Call) Return(devices []cups.Device, err error) *MockPkHelper_DevicesGet_Call {
_c.Call.Return(devices, err)
func (_c *MockPkHelper_DevicesGet_Call) Return(_a0 []cups.Device, _a1 error) *MockPkHelper_DevicesGet_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockPkHelper_DevicesGet_Call) RunAndReturn(run func(timeout int, limit int, includeSchemes []string, excludeSchemes []string) ([]cups.Device, error)) *MockPkHelper_DevicesGet_Call {
func (_c *MockPkHelper_DevicesGet_Call) RunAndReturn(run func(int, int, []string, []string) ([]cups.Device, error)) *MockPkHelper_DevicesGet_Call {
_c.Call.Return(run)
return _c
}
// JobCancelPurge provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) JobCancelPurge(jobID int, purge bool) error {
ret := _mock.Called(jobID, purge)
// JobCancelPurge provides a mock function with given fields: jobID, purge
func (_m *MockPkHelper) JobCancelPurge(jobID int, purge bool) error {
ret := _m.Called(jobID, purge)
if len(ret) == 0 {
panic("no return value specified for JobCancelPurge")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(int, bool) error); ok {
r0 = returnFunc(jobID, purge)
if rf, ok := ret.Get(0).(func(int, bool) error); ok {
r0 = rf(jobID, purge)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -306,52 +247,42 @@ type MockPkHelper_JobCancelPurge_Call struct {
// JobCancelPurge is a helper method to define mock.On call
// - jobID int
// - purge bool
func (_e *MockPkHelper_Expecter) JobCancelPurge(jobID any, purge any) *MockPkHelper_JobCancelPurge_Call {
func (_e *MockPkHelper_Expecter) JobCancelPurge(jobID interface{}, purge interface{}) *MockPkHelper_JobCancelPurge_Call {
return &MockPkHelper_JobCancelPurge_Call{Call: _e.mock.On("JobCancelPurge", jobID, purge)}
}
func (_c *MockPkHelper_JobCancelPurge_Call) Run(run func(jobID int, purge bool)) *MockPkHelper_JobCancelPurge_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 int
if args[0] != nil {
arg0 = args[0].(int)
}
var arg1 bool
if args[1] != nil {
arg1 = args[1].(bool)
}
run(
arg0,
arg1,
)
run(args[0].(int), args[1].(bool))
})
return _c
}
func (_c *MockPkHelper_JobCancelPurge_Call) Return(err error) *MockPkHelper_JobCancelPurge_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_JobCancelPurge_Call) Return(_a0 error) *MockPkHelper_JobCancelPurge_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_JobCancelPurge_Call) RunAndReturn(run func(jobID int, purge bool) error) *MockPkHelper_JobCancelPurge_Call {
func (_c *MockPkHelper_JobCancelPurge_Call) RunAndReturn(run func(int, bool) error) *MockPkHelper_JobCancelPurge_Call {
_c.Call.Return(run)
return _c
}
// JobRestart provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) JobRestart(jobID int) error {
ret := _mock.Called(jobID)
// JobRestart provides a mock function with given fields: jobID
func (_m *MockPkHelper) JobRestart(jobID int) error {
ret := _m.Called(jobID)
if len(ret) == 0 {
panic("no return value specified for JobRestart")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(int) error); ok {
r0 = returnFunc(jobID)
if rf, ok := ret.Get(0).(func(int) error); ok {
r0 = rf(jobID)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -362,47 +293,42 @@ type MockPkHelper_JobRestart_Call struct {
// JobRestart is a helper method to define mock.On call
// - jobID int
func (_e *MockPkHelper_Expecter) JobRestart(jobID any) *MockPkHelper_JobRestart_Call {
func (_e *MockPkHelper_Expecter) JobRestart(jobID interface{}) *MockPkHelper_JobRestart_Call {
return &MockPkHelper_JobRestart_Call{Call: _e.mock.On("JobRestart", jobID)}
}
func (_c *MockPkHelper_JobRestart_Call) Run(run func(jobID int)) *MockPkHelper_JobRestart_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 int
if args[0] != nil {
arg0 = args[0].(int)
}
run(
arg0,
)
run(args[0].(int))
})
return _c
}
func (_c *MockPkHelper_JobRestart_Call) Return(err error) *MockPkHelper_JobRestart_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_JobRestart_Call) Return(_a0 error) *MockPkHelper_JobRestart_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_JobRestart_Call) RunAndReturn(run func(jobID int) error) *MockPkHelper_JobRestart_Call {
func (_c *MockPkHelper_JobRestart_Call) RunAndReturn(run func(int) error) *MockPkHelper_JobRestart_Call {
_c.Call.Return(run)
return _c
}
// JobSetHoldUntil provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) JobSetHoldUntil(jobID int, holdUntil string) error {
ret := _mock.Called(jobID, holdUntil)
// JobSetHoldUntil provides a mock function with given fields: jobID, holdUntil
func (_m *MockPkHelper) JobSetHoldUntil(jobID int, holdUntil string) error {
ret := _m.Called(jobID, holdUntil)
if len(ret) == 0 {
panic("no return value specified for JobSetHoldUntil")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(int, string) error); ok {
r0 = returnFunc(jobID, holdUntil)
if rf, ok := ret.Get(0).(func(int, string) error); ok {
r0 = rf(jobID, holdUntil)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -414,52 +340,42 @@ type MockPkHelper_JobSetHoldUntil_Call struct {
// JobSetHoldUntil is a helper method to define mock.On call
// - jobID int
// - holdUntil string
func (_e *MockPkHelper_Expecter) JobSetHoldUntil(jobID any, holdUntil any) *MockPkHelper_JobSetHoldUntil_Call {
func (_e *MockPkHelper_Expecter) JobSetHoldUntil(jobID interface{}, holdUntil interface{}) *MockPkHelper_JobSetHoldUntil_Call {
return &MockPkHelper_JobSetHoldUntil_Call{Call: _e.mock.On("JobSetHoldUntil", jobID, holdUntil)}
}
func (_c *MockPkHelper_JobSetHoldUntil_Call) Run(run func(jobID int, holdUntil string)) *MockPkHelper_JobSetHoldUntil_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 int
if args[0] != nil {
arg0 = args[0].(int)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
run(
arg0,
arg1,
)
run(args[0].(int), args[1].(string))
})
return _c
}
func (_c *MockPkHelper_JobSetHoldUntil_Call) Return(err error) *MockPkHelper_JobSetHoldUntil_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_JobSetHoldUntil_Call) Return(_a0 error) *MockPkHelper_JobSetHoldUntil_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_JobSetHoldUntil_Call) RunAndReturn(run func(jobID int, holdUntil string) error) *MockPkHelper_JobSetHoldUntil_Call {
func (_c *MockPkHelper_JobSetHoldUntil_Call) RunAndReturn(run func(int, string) error) *MockPkHelper_JobSetHoldUntil_Call {
_c.Call.Return(run)
return _c
}
// PrinterAdd provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) PrinterAdd(name string, uri string, ppd string, info string, location string) error {
ret := _mock.Called(name, uri, ppd, info, location)
// PrinterAdd provides a mock function with given fields: name, uri, ppd, info, location
func (_m *MockPkHelper) PrinterAdd(name string, uri string, ppd string, info string, location string) error {
ret := _m.Called(name, uri, ppd, info, location)
if len(ret) == 0 {
panic("no return value specified for PrinterAdd")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string, string, string, string, string) error); ok {
r0 = returnFunc(name, uri, ppd, info, location)
if rf, ok := ret.Get(0).(func(string, string, string, string, string) error); ok {
r0 = rf(name, uri, ppd, info, location)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -474,67 +390,42 @@ type MockPkHelper_PrinterAdd_Call struct {
// - ppd string
// - info string
// - location string
func (_e *MockPkHelper_Expecter) PrinterAdd(name any, uri any, ppd any, info any, location any) *MockPkHelper_PrinterAdd_Call {
func (_e *MockPkHelper_Expecter) PrinterAdd(name interface{}, uri interface{}, ppd interface{}, info interface{}, location interface{}) *MockPkHelper_PrinterAdd_Call {
return &MockPkHelper_PrinterAdd_Call{Call: _e.mock.On("PrinterAdd", name, uri, ppd, info, location)}
}
func (_c *MockPkHelper_PrinterAdd_Call) Run(run func(name string, uri string, ppd string, info string, location string)) *MockPkHelper_PrinterAdd_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
var arg2 string
if args[2] != nil {
arg2 = args[2].(string)
}
var arg3 string
if args[3] != nil {
arg3 = args[3].(string)
}
var arg4 string
if args[4] != nil {
arg4 = args[4].(string)
}
run(
arg0,
arg1,
arg2,
arg3,
arg4,
)
run(args[0].(string), args[1].(string), args[2].(string), args[3].(string), args[4].(string))
})
return _c
}
func (_c *MockPkHelper_PrinterAdd_Call) Return(err error) *MockPkHelper_PrinterAdd_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_PrinterAdd_Call) Return(_a0 error) *MockPkHelper_PrinterAdd_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_PrinterAdd_Call) RunAndReturn(run func(name string, uri string, ppd string, info string, location string) error) *MockPkHelper_PrinterAdd_Call {
func (_c *MockPkHelper_PrinterAdd_Call) RunAndReturn(run func(string, string, string, string, string) error) *MockPkHelper_PrinterAdd_Call {
_c.Call.Return(run)
return _c
}
// PrinterDelete provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) PrinterDelete(name string) error {
ret := _mock.Called(name)
// PrinterDelete provides a mock function with given fields: name
func (_m *MockPkHelper) PrinterDelete(name string) error {
ret := _m.Called(name)
if len(ret) == 0 {
panic("no return value specified for PrinterDelete")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string) error); ok {
r0 = returnFunc(name)
if rf, ok := ret.Get(0).(func(string) error); ok {
r0 = rf(name)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -545,47 +436,42 @@ type MockPkHelper_PrinterDelete_Call struct {
// PrinterDelete is a helper method to define mock.On call
// - name string
func (_e *MockPkHelper_Expecter) PrinterDelete(name any) *MockPkHelper_PrinterDelete_Call {
func (_e *MockPkHelper_Expecter) PrinterDelete(name interface{}) *MockPkHelper_PrinterDelete_Call {
return &MockPkHelper_PrinterDelete_Call{Call: _e.mock.On("PrinterDelete", name)}
}
func (_c *MockPkHelper_PrinterDelete_Call) Run(run func(name string)) *MockPkHelper_PrinterDelete_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockPkHelper_PrinterDelete_Call) Return(err error) *MockPkHelper_PrinterDelete_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_PrinterDelete_Call) Return(_a0 error) *MockPkHelper_PrinterDelete_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_PrinterDelete_Call) RunAndReturn(run func(name string) error) *MockPkHelper_PrinterDelete_Call {
func (_c *MockPkHelper_PrinterDelete_Call) RunAndReturn(run func(string) error) *MockPkHelper_PrinterDelete_Call {
_c.Call.Return(run)
return _c
}
// PrinterSetAcceptJobs provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) PrinterSetAcceptJobs(name string, enabled bool, reason string) error {
ret := _mock.Called(name, enabled, reason)
// PrinterSetAcceptJobs provides a mock function with given fields: name, enabled, reason
func (_m *MockPkHelper) PrinterSetAcceptJobs(name string, enabled bool, reason string) error {
ret := _m.Called(name, enabled, reason)
if len(ret) == 0 {
panic("no return value specified for PrinterSetAcceptJobs")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string, bool, string) error); ok {
r0 = returnFunc(name, enabled, reason)
if rf, ok := ret.Get(0).(func(string, bool, string) error); ok {
r0 = rf(name, enabled, reason)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -598,57 +484,42 @@ type MockPkHelper_PrinterSetAcceptJobs_Call struct {
// - name string
// - enabled bool
// - reason string
func (_e *MockPkHelper_Expecter) PrinterSetAcceptJobs(name any, enabled any, reason any) *MockPkHelper_PrinterSetAcceptJobs_Call {
func (_e *MockPkHelper_Expecter) PrinterSetAcceptJobs(name interface{}, enabled interface{}, reason interface{}) *MockPkHelper_PrinterSetAcceptJobs_Call {
return &MockPkHelper_PrinterSetAcceptJobs_Call{Call: _e.mock.On("PrinterSetAcceptJobs", name, enabled, reason)}
}
func (_c *MockPkHelper_PrinterSetAcceptJobs_Call) Run(run func(name string, enabled bool, reason string)) *MockPkHelper_PrinterSetAcceptJobs_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 bool
if args[1] != nil {
arg1 = args[1].(bool)
}
var arg2 string
if args[2] != nil {
arg2 = args[2].(string)
}
run(
arg0,
arg1,
arg2,
)
run(args[0].(string), args[1].(bool), args[2].(string))
})
return _c
}
func (_c *MockPkHelper_PrinterSetAcceptJobs_Call) Return(err error) *MockPkHelper_PrinterSetAcceptJobs_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_PrinterSetAcceptJobs_Call) Return(_a0 error) *MockPkHelper_PrinterSetAcceptJobs_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_PrinterSetAcceptJobs_Call) RunAndReturn(run func(name string, enabled bool, reason string) error) *MockPkHelper_PrinterSetAcceptJobs_Call {
func (_c *MockPkHelper_PrinterSetAcceptJobs_Call) RunAndReturn(run func(string, bool, string) error) *MockPkHelper_PrinterSetAcceptJobs_Call {
_c.Call.Return(run)
return _c
}
// PrinterSetEnabled provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) PrinterSetEnabled(name string, enabled bool) error {
ret := _mock.Called(name, enabled)
// PrinterSetEnabled provides a mock function with given fields: name, enabled
func (_m *MockPkHelper) PrinterSetEnabled(name string, enabled bool) error {
ret := _m.Called(name, enabled)
if len(ret) == 0 {
panic("no return value specified for PrinterSetEnabled")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string, bool) error); ok {
r0 = returnFunc(name, enabled)
if rf, ok := ret.Get(0).(func(string, bool) error); ok {
r0 = rf(name, enabled)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -660,52 +531,42 @@ type MockPkHelper_PrinterSetEnabled_Call struct {
// PrinterSetEnabled is a helper method to define mock.On call
// - name string
// - enabled bool
func (_e *MockPkHelper_Expecter) PrinterSetEnabled(name any, enabled any) *MockPkHelper_PrinterSetEnabled_Call {
func (_e *MockPkHelper_Expecter) PrinterSetEnabled(name interface{}, enabled interface{}) *MockPkHelper_PrinterSetEnabled_Call {
return &MockPkHelper_PrinterSetEnabled_Call{Call: _e.mock.On("PrinterSetEnabled", name, enabled)}
}
func (_c *MockPkHelper_PrinterSetEnabled_Call) Run(run func(name string, enabled bool)) *MockPkHelper_PrinterSetEnabled_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 bool
if args[1] != nil {
arg1 = args[1].(bool)
}
run(
arg0,
arg1,
)
run(args[0].(string), args[1].(bool))
})
return _c
}
func (_c *MockPkHelper_PrinterSetEnabled_Call) Return(err error) *MockPkHelper_PrinterSetEnabled_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_PrinterSetEnabled_Call) Return(_a0 error) *MockPkHelper_PrinterSetEnabled_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_PrinterSetEnabled_Call) RunAndReturn(run func(name string, enabled bool) error) *MockPkHelper_PrinterSetEnabled_Call {
func (_c *MockPkHelper_PrinterSetEnabled_Call) RunAndReturn(run func(string, bool) error) *MockPkHelper_PrinterSetEnabled_Call {
_c.Call.Return(run)
return _c
}
// PrinterSetInfo provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) PrinterSetInfo(name string, info string) error {
ret := _mock.Called(name, info)
// PrinterSetInfo provides a mock function with given fields: name, info
func (_m *MockPkHelper) PrinterSetInfo(name string, info string) error {
ret := _m.Called(name, info)
if len(ret) == 0 {
panic("no return value specified for PrinterSetInfo")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string, string) error); ok {
r0 = returnFunc(name, info)
if rf, ok := ret.Get(0).(func(string, string) error); ok {
r0 = rf(name, info)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -717,52 +578,42 @@ type MockPkHelper_PrinterSetInfo_Call struct {
// PrinterSetInfo is a helper method to define mock.On call
// - name string
// - info string
func (_e *MockPkHelper_Expecter) PrinterSetInfo(name any, info any) *MockPkHelper_PrinterSetInfo_Call {
func (_e *MockPkHelper_Expecter) PrinterSetInfo(name interface{}, info interface{}) *MockPkHelper_PrinterSetInfo_Call {
return &MockPkHelper_PrinterSetInfo_Call{Call: _e.mock.On("PrinterSetInfo", name, info)}
}
func (_c *MockPkHelper_PrinterSetInfo_Call) Run(run func(name string, info string)) *MockPkHelper_PrinterSetInfo_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
run(
arg0,
arg1,
)
run(args[0].(string), args[1].(string))
})
return _c
}
func (_c *MockPkHelper_PrinterSetInfo_Call) Return(err error) *MockPkHelper_PrinterSetInfo_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_PrinterSetInfo_Call) Return(_a0 error) *MockPkHelper_PrinterSetInfo_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_PrinterSetInfo_Call) RunAndReturn(run func(name string, info string) error) *MockPkHelper_PrinterSetInfo_Call {
func (_c *MockPkHelper_PrinterSetInfo_Call) RunAndReturn(run func(string, string) error) *MockPkHelper_PrinterSetInfo_Call {
_c.Call.Return(run)
return _c
}
// PrinterSetLocation provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) PrinterSetLocation(name string, location string) error {
ret := _mock.Called(name, location)
// PrinterSetLocation provides a mock function with given fields: name, location
func (_m *MockPkHelper) PrinterSetLocation(name string, location string) error {
ret := _m.Called(name, location)
if len(ret) == 0 {
panic("no return value specified for PrinterSetLocation")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string, string) error); ok {
r0 = returnFunc(name, location)
if rf, ok := ret.Get(0).(func(string, string) error); ok {
r0 = rf(name, location)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -774,52 +625,42 @@ type MockPkHelper_PrinterSetLocation_Call struct {
// PrinterSetLocation is a helper method to define mock.On call
// - name string
// - location string
func (_e *MockPkHelper_Expecter) PrinterSetLocation(name any, location any) *MockPkHelper_PrinterSetLocation_Call {
func (_e *MockPkHelper_Expecter) PrinterSetLocation(name interface{}, location interface{}) *MockPkHelper_PrinterSetLocation_Call {
return &MockPkHelper_PrinterSetLocation_Call{Call: _e.mock.On("PrinterSetLocation", name, location)}
}
func (_c *MockPkHelper_PrinterSetLocation_Call) Run(run func(name string, location string)) *MockPkHelper_PrinterSetLocation_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
run(
arg0,
arg1,
)
run(args[0].(string), args[1].(string))
})
return _c
}
func (_c *MockPkHelper_PrinterSetLocation_Call) Return(err error) *MockPkHelper_PrinterSetLocation_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_PrinterSetLocation_Call) Return(_a0 error) *MockPkHelper_PrinterSetLocation_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_PrinterSetLocation_Call) RunAndReturn(run func(name string, location string) error) *MockPkHelper_PrinterSetLocation_Call {
func (_c *MockPkHelper_PrinterSetLocation_Call) RunAndReturn(run func(string, string) error) *MockPkHelper_PrinterSetLocation_Call {
_c.Call.Return(run)
return _c
}
// PrinterSetShared provides a mock function for the type MockPkHelper
func (_mock *MockPkHelper) PrinterSetShared(name string, shared bool) error {
ret := _mock.Called(name, shared)
// PrinterSetShared provides a mock function with given fields: name, shared
func (_m *MockPkHelper) PrinterSetShared(name string, shared bool) error {
ret := _m.Called(name, shared)
if len(ret) == 0 {
panic("no return value specified for PrinterSetShared")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string, bool) error); ok {
r0 = returnFunc(name, shared)
if rf, ok := ret.Get(0).(func(string, bool) error); ok {
r0 = rf(name, shared)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -831,34 +672,37 @@ type MockPkHelper_PrinterSetShared_Call struct {
// PrinterSetShared is a helper method to define mock.On call
// - name string
// - shared bool
func (_e *MockPkHelper_Expecter) PrinterSetShared(name any, shared any) *MockPkHelper_PrinterSetShared_Call {
func (_e *MockPkHelper_Expecter) PrinterSetShared(name interface{}, shared interface{}) *MockPkHelper_PrinterSetShared_Call {
return &MockPkHelper_PrinterSetShared_Call{Call: _e.mock.On("PrinterSetShared", name, shared)}
}
func (_c *MockPkHelper_PrinterSetShared_Call) Run(run func(name string, shared bool)) *MockPkHelper_PrinterSetShared_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 bool
if args[1] != nil {
arg1 = args[1].(bool)
}
run(
arg0,
arg1,
)
run(args[0].(string), args[1].(bool))
})
return _c
}
func (_c *MockPkHelper_PrinterSetShared_Call) Return(err error) *MockPkHelper_PrinterSetShared_Call {
_c.Call.Return(err)
func (_c *MockPkHelper_PrinterSetShared_Call) Return(_a0 error) *MockPkHelper_PrinterSetShared_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockPkHelper_PrinterSetShared_Call) RunAndReturn(run func(name string, shared bool) error) *MockPkHelper_PrinterSetShared_Call {
func (_c *MockPkHelper_PrinterSetShared_Call) RunAndReturn(run func(string, bool) error) *MockPkHelper_PrinterSetShared_Call {
_c.Call.Return(run)
return _c
}
// NewMockPkHelper creates a new instance of MockPkHelper. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockPkHelper(t interface {
mock.TestingT
Cleanup(func())
}) *MockPkHelper {
mock := &MockPkHelper{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
+81 -81
View File
@@ -1,28 +1,12 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package mocks_evdev
import (
"github.com/holoplot/go-evdev"
go_evdev "github.com/holoplot/go-evdev"
mock "github.com/stretchr/testify/mock"
)
// NewMockEvdevDevice creates a new instance of MockEvdevDevice. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockEvdevDevice(t interface {
mock.TestingT
Cleanup(func())
}) *MockEvdevDevice {
mock := &MockEvdevDevice{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockEvdevDevice is an autogenerated mock type for the EvdevDevice type
type MockEvdevDevice struct {
mock.Mock
@@ -36,20 +20,21 @@ func (_m *MockEvdevDevice) EXPECT() *MockEvdevDevice_Expecter {
return &MockEvdevDevice_Expecter{mock: &_m.Mock}
}
// Close provides a mock function for the type MockEvdevDevice
func (_mock *MockEvdevDevice) Close() error {
ret := _mock.Called()
// Close provides a mock function with no fields
func (_m *MockEvdevDevice) Close() error {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Close")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func() error); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() error); ok {
r0 = rf()
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -70,8 +55,8 @@ func (_c *MockEvdevDevice_Close_Call) Run(run func()) *MockEvdevDevice_Close_Cal
return _c
}
func (_c *MockEvdevDevice_Close_Call) Return(err error) *MockEvdevDevice_Close_Call {
_c.Call.Return(err)
func (_c *MockEvdevDevice_Close_Call) Return(_a0 error) *MockEvdevDevice_Close_Call {
_c.Call.Return(_a0)
return _c
}
@@ -80,9 +65,9 @@ func (_c *MockEvdevDevice_Close_Call) RunAndReturn(run func() error) *MockEvdevD
return _c
}
// Name provides a mock function for the type MockEvdevDevice
func (_mock *MockEvdevDevice) Name() (string, error) {
ret := _mock.Called()
// Name provides a mock function with no fields
func (_m *MockEvdevDevice) Name() (string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Name")
@@ -90,19 +75,21 @@ func (_mock *MockEvdevDevice) Name() (string, error) {
var r0 string
var r1 error
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -123,8 +110,8 @@ func (_c *MockEvdevDevice_Name_Call) Run(run func()) *MockEvdevDevice_Name_Call
return _c
}
func (_c *MockEvdevDevice_Name_Call) Return(s string, err error) *MockEvdevDevice_Name_Call {
_c.Call.Return(s, err)
func (_c *MockEvdevDevice_Name_Call) Return(_a0 string, _a1 error) *MockEvdevDevice_Name_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -133,20 +120,21 @@ func (_c *MockEvdevDevice_Name_Call) RunAndReturn(run func() (string, error)) *M
return _c
}
// Path provides a mock function for the type MockEvdevDevice
func (_mock *MockEvdevDevice) Path() string {
ret := _mock.Called()
// Path provides a mock function with no fields
func (_m *MockEvdevDevice) Path() string {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Path")
}
var r0 string
if returnFunc, ok := ret.Get(0).(func() string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}
return r0
}
@@ -167,8 +155,8 @@ func (_c *MockEvdevDevice_Path_Call) Run(run func()) *MockEvdevDevice_Path_Call
return _c
}
func (_c *MockEvdevDevice_Path_Call) Return(s string) *MockEvdevDevice_Path_Call {
_c.Call.Return(s)
func (_c *MockEvdevDevice_Path_Call) Return(_a0 string) *MockEvdevDevice_Path_Call {
_c.Call.Return(_a0)
return _c
}
@@ -177,31 +165,33 @@ func (_c *MockEvdevDevice_Path_Call) RunAndReturn(run func() string) *MockEvdevD
return _c
}
// ReadOne provides a mock function for the type MockEvdevDevice
func (_mock *MockEvdevDevice) ReadOne() (*evdev.InputEvent, error) {
ret := _mock.Called()
// ReadOne provides a mock function with no fields
func (_m *MockEvdevDevice) ReadOne() (*go_evdev.InputEvent, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for ReadOne")
}
var r0 *evdev.InputEvent
var r0 *go_evdev.InputEvent
var r1 error
if returnFunc, ok := ret.Get(0).(func() (*evdev.InputEvent, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (*go_evdev.InputEvent, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() *evdev.InputEvent); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() *go_evdev.InputEvent); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*evdev.InputEvent)
r0 = ret.Get(0).(*go_evdev.InputEvent)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -222,41 +212,43 @@ func (_c *MockEvdevDevice_ReadOne_Call) Run(run func()) *MockEvdevDevice_ReadOne
return _c
}
func (_c *MockEvdevDevice_ReadOne_Call) Return(inputEvent *evdev.InputEvent, err error) *MockEvdevDevice_ReadOne_Call {
_c.Call.Return(inputEvent, err)
func (_c *MockEvdevDevice_ReadOne_Call) Return(_a0 *go_evdev.InputEvent, _a1 error) *MockEvdevDevice_ReadOne_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockEvdevDevice_ReadOne_Call) RunAndReturn(run func() (*evdev.InputEvent, error)) *MockEvdevDevice_ReadOne_Call {
func (_c *MockEvdevDevice_ReadOne_Call) RunAndReturn(run func() (*go_evdev.InputEvent, error)) *MockEvdevDevice_ReadOne_Call {
_c.Call.Return(run)
return _c
}
// State provides a mock function for the type MockEvdevDevice
func (_mock *MockEvdevDevice) State(t evdev.EvType) (evdev.StateMap, error) {
ret := _mock.Called(t)
// State provides a mock function with given fields: t
func (_m *MockEvdevDevice) State(t go_evdev.EvType) (go_evdev.StateMap, error) {
ret := _m.Called(t)
if len(ret) == 0 {
panic("no return value specified for State")
}
var r0 evdev.StateMap
var r0 go_evdev.StateMap
var r1 error
if returnFunc, ok := ret.Get(0).(func(evdev.EvType) (evdev.StateMap, error)); ok {
return returnFunc(t)
if rf, ok := ret.Get(0).(func(go_evdev.EvType) (go_evdev.StateMap, error)); ok {
return rf(t)
}
if returnFunc, ok := ret.Get(0).(func(evdev.EvType) evdev.StateMap); ok {
r0 = returnFunc(t)
if rf, ok := ret.Get(0).(func(go_evdev.EvType) go_evdev.StateMap); ok {
r0 = rf(t)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(evdev.StateMap)
r0 = ret.Get(0).(go_evdev.StateMap)
}
}
if returnFunc, ok := ret.Get(1).(func(evdev.EvType) error); ok {
r1 = returnFunc(t)
if rf, ok := ret.Get(1).(func(go_evdev.EvType) error); ok {
r1 = rf(t)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -266,30 +258,38 @@ type MockEvdevDevice_State_Call struct {
}
// State is a helper method to define mock.On call
// - t evdev.EvType
func (_e *MockEvdevDevice_Expecter) State(t any) *MockEvdevDevice_State_Call {
// - t go_evdev.EvType
func (_e *MockEvdevDevice_Expecter) State(t interface{}) *MockEvdevDevice_State_Call {
return &MockEvdevDevice_State_Call{Call: _e.mock.On("State", t)}
}
func (_c *MockEvdevDevice_State_Call) Run(run func(t evdev.EvType)) *MockEvdevDevice_State_Call {
func (_c *MockEvdevDevice_State_Call) Run(run func(t go_evdev.EvType)) *MockEvdevDevice_State_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 evdev.EvType
if args[0] != nil {
arg0 = args[0].(evdev.EvType)
}
run(
arg0,
)
run(args[0].(go_evdev.EvType))
})
return _c
}
func (_c *MockEvdevDevice_State_Call) Return(stateMap evdev.StateMap, err error) *MockEvdevDevice_State_Call {
_c.Call.Return(stateMap, err)
func (_c *MockEvdevDevice_State_Call) Return(_a0 go_evdev.StateMap, _a1 error) *MockEvdevDevice_State_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockEvdevDevice_State_Call) RunAndReturn(run func(t evdev.EvType) (evdev.StateMap, error)) *MockEvdevDevice_State_Call {
func (_c *MockEvdevDevice_State_Call) RunAndReturn(run func(go_evdev.EvType) (go_evdev.StateMap, error)) *MockEvdevDevice_State_Call {
_c.Call.Return(run)
return _c
}
// NewMockEvdevDevice creates a new instance of MockEvdevDevice. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockEvdevDevice(t interface {
mock.TestingT
Cleanup(func())
}) *MockEvdevDevice {
mock := &MockEvdevDevice{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
+49 -62
View File
@@ -1,28 +1,12 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package mocks_geolocation
import (
"github.com/AvengeMedia/DankMaterialShell/core/internal/geolocation"
geolocation "github.com/AvengeMedia/DankMaterialShell/core/internal/geolocation"
mock "github.com/stretchr/testify/mock"
)
// NewMockClient creates a new instance of MockClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockClient(t interface {
mock.TestingT
Cleanup(func())
}) *MockClient {
mock := &MockClient{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockClient is an autogenerated mock type for the Client type
type MockClient struct {
mock.Mock
@@ -36,10 +20,9 @@ func (_m *MockClient) EXPECT() *MockClient_Expecter {
return &MockClient_Expecter{mock: &_m.Mock}
}
// Close provides a mock function for the type MockClient
func (_mock *MockClient) Close() {
_mock.Called()
return
// Close provides a mock function with no fields
func (_m *MockClient) Close() {
_m.Called()
}
// MockClient_Close_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Close'
@@ -69,9 +52,9 @@ func (_c *MockClient_Close_Call) RunAndReturn(run func()) *MockClient_Close_Call
return _c
}
// GetLocation provides a mock function for the type MockClient
func (_mock *MockClient) GetLocation() (geolocation.Location, error) {
ret := _mock.Called()
// GetLocation provides a mock function with no fields
func (_m *MockClient) GetLocation() (geolocation.Location, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetLocation")
@@ -79,19 +62,21 @@ func (_mock *MockClient) GetLocation() (geolocation.Location, error) {
var r0 geolocation.Location
var r1 error
if returnFunc, ok := ret.Get(0).(func() (geolocation.Location, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (geolocation.Location, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() geolocation.Location); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() geolocation.Location); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(geolocation.Location)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -112,8 +97,8 @@ func (_c *MockClient_GetLocation_Call) Run(run func()) *MockClient_GetLocation_C
return _c
}
func (_c *MockClient_GetLocation_Call) Return(location geolocation.Location, err error) *MockClient_GetLocation_Call {
_c.Call.Return(location, err)
func (_c *MockClient_GetLocation_Call) Return(_a0 geolocation.Location, _a1 error) *MockClient_GetLocation_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -122,22 +107,23 @@ func (_c *MockClient_GetLocation_Call) RunAndReturn(run func() (geolocation.Loca
return _c
}
// Subscribe provides a mock function for the type MockClient
func (_mock *MockClient) Subscribe(id string) chan geolocation.Location {
ret := _mock.Called(id)
// Subscribe provides a mock function with given fields: id
func (_m *MockClient) Subscribe(id string) chan geolocation.Location {
ret := _m.Called(id)
if len(ret) == 0 {
panic("no return value specified for Subscribe")
}
var r0 chan geolocation.Location
if returnFunc, ok := ret.Get(0).(func(string) chan geolocation.Location); ok {
r0 = returnFunc(id)
if rf, ok := ret.Get(0).(func(string) chan geolocation.Location); ok {
r0 = rf(id)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(chan geolocation.Location)
}
}
return r0
}
@@ -148,37 +134,30 @@ type MockClient_Subscribe_Call struct {
// Subscribe is a helper method to define mock.On call
// - id string
func (_e *MockClient_Expecter) Subscribe(id any) *MockClient_Subscribe_Call {
func (_e *MockClient_Expecter) Subscribe(id interface{}) *MockClient_Subscribe_Call {
return &MockClient_Subscribe_Call{Call: _e.mock.On("Subscribe", id)}
}
func (_c *MockClient_Subscribe_Call) Run(run func(id string)) *MockClient_Subscribe_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockClient_Subscribe_Call) Return(locationCh chan geolocation.Location) *MockClient_Subscribe_Call {
_c.Call.Return(locationCh)
func (_c *MockClient_Subscribe_Call) Return(_a0 chan geolocation.Location) *MockClient_Subscribe_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockClient_Subscribe_Call) RunAndReturn(run func(id string) chan geolocation.Location) *MockClient_Subscribe_Call {
func (_c *MockClient_Subscribe_Call) RunAndReturn(run func(string) chan geolocation.Location) *MockClient_Subscribe_Call {
_c.Call.Return(run)
return _c
}
// Unsubscribe provides a mock function for the type MockClient
func (_mock *MockClient) Unsubscribe(id string) {
_mock.Called(id)
return
// Unsubscribe provides a mock function with given fields: id
func (_m *MockClient) Unsubscribe(id string) {
_m.Called(id)
}
// MockClient_Unsubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Unsubscribe'
@@ -188,19 +167,13 @@ type MockClient_Unsubscribe_Call struct {
// Unsubscribe is a helper method to define mock.On call
// - id string
func (_e *MockClient_Expecter) Unsubscribe(id any) *MockClient_Unsubscribe_Call {
func (_e *MockClient_Expecter) Unsubscribe(id interface{}) *MockClient_Unsubscribe_Call {
return &MockClient_Unsubscribe_Call{Call: _e.mock.On("Unsubscribe", id)}
}
func (_c *MockClient_Unsubscribe_Call) Run(run func(id string)) *MockClient_Unsubscribe_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
@@ -210,7 +183,21 @@ func (_c *MockClient_Unsubscribe_Call) Return() *MockClient_Unsubscribe_Call {
return _c
}
func (_c *MockClient_Unsubscribe_Call) RunAndReturn(run func(id string)) *MockClient_Unsubscribe_Call {
func (_c *MockClient_Unsubscribe_Call) RunAndReturn(run func(string)) *MockClient_Unsubscribe_Call {
_c.Run(run)
return _c
}
// NewMockClient creates a new instance of MockClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockClient(t interface {
mock.TestingT
Cleanup(func())
}) *MockClient {
mock := &MockClient{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
@@ -1,29 +1,14 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package gonetworkmanager
import (
"github.com/Wifx/gonetworkmanager/v2"
"github.com/godbus/dbus/v5"
gonetworkmanager "github.com/Wifx/gonetworkmanager/v2"
dbus "github.com/godbus/dbus/v5"
mock "github.com/stretchr/testify/mock"
)
// NewMockAccessPoint creates a new instance of MockAccessPoint. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockAccessPoint(t interface {
mock.TestingT
Cleanup(func())
}) *MockAccessPoint {
mock := &MockAccessPoint{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockAccessPoint is an autogenerated mock type for the AccessPoint type
type MockAccessPoint struct {
mock.Mock
@@ -37,20 +22,21 @@ func (_m *MockAccessPoint) EXPECT() *MockAccessPoint_Expecter {
return &MockAccessPoint_Expecter{mock: &_m.Mock}
}
// GetPath provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) GetPath() dbus.ObjectPath {
ret := _mock.Called()
// GetPath provides a mock function with no fields
func (_m *MockAccessPoint) GetPath() dbus.ObjectPath {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPath")
}
var r0 dbus.ObjectPath
if returnFunc, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(dbus.ObjectPath)
}
return r0
}
@@ -71,8 +57,8 @@ func (_c *MockAccessPoint_GetPath_Call) Run(run func()) *MockAccessPoint_GetPath
return _c
}
func (_c *MockAccessPoint_GetPath_Call) Return(objectPath dbus.ObjectPath) *MockAccessPoint_GetPath_Call {
_c.Call.Return(objectPath)
func (_c *MockAccessPoint_GetPath_Call) Return(_a0 dbus.ObjectPath) *MockAccessPoint_GetPath_Call {
_c.Call.Return(_a0)
return _c
}
@@ -81,9 +67,9 @@ func (_c *MockAccessPoint_GetPath_Call) RunAndReturn(run func() dbus.ObjectPath)
return _c
}
// GetPropertyFlags provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) GetPropertyFlags() (uint32, error) {
ret := _mock.Called()
// GetPropertyFlags provides a mock function with no fields
func (_m *MockAccessPoint) GetPropertyFlags() (uint32, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyFlags")
@@ -91,19 +77,21 @@ func (_mock *MockAccessPoint) GetPropertyFlags() (uint32, error) {
var r0 uint32
var r1 error
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() uint32); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(uint32)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -124,8 +112,8 @@ func (_c *MockAccessPoint_GetPropertyFlags_Call) Run(run func()) *MockAccessPoin
return _c
}
func (_c *MockAccessPoint_GetPropertyFlags_Call) Return(v uint32, err error) *MockAccessPoint_GetPropertyFlags_Call {
_c.Call.Return(v, err)
func (_c *MockAccessPoint_GetPropertyFlags_Call) Return(_a0 uint32, _a1 error) *MockAccessPoint_GetPropertyFlags_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -134,9 +122,9 @@ func (_c *MockAccessPoint_GetPropertyFlags_Call) RunAndReturn(run func() (uint32
return _c
}
// GetPropertyFrequency provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) GetPropertyFrequency() (uint32, error) {
ret := _mock.Called()
// GetPropertyFrequency provides a mock function with no fields
func (_m *MockAccessPoint) GetPropertyFrequency() (uint32, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyFrequency")
@@ -144,19 +132,21 @@ func (_mock *MockAccessPoint) GetPropertyFrequency() (uint32, error) {
var r0 uint32
var r1 error
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() uint32); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(uint32)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -177,8 +167,8 @@ func (_c *MockAccessPoint_GetPropertyFrequency_Call) Run(run func()) *MockAccess
return _c
}
func (_c *MockAccessPoint_GetPropertyFrequency_Call) Return(v uint32, err error) *MockAccessPoint_GetPropertyFrequency_Call {
_c.Call.Return(v, err)
func (_c *MockAccessPoint_GetPropertyFrequency_Call) Return(_a0 uint32, _a1 error) *MockAccessPoint_GetPropertyFrequency_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -187,9 +177,9 @@ func (_c *MockAccessPoint_GetPropertyFrequency_Call) RunAndReturn(run func() (ui
return _c
}
// GetPropertyHWAddress provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) GetPropertyHWAddress() (string, error) {
ret := _mock.Called()
// GetPropertyHWAddress provides a mock function with no fields
func (_m *MockAccessPoint) GetPropertyHWAddress() (string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyHWAddress")
@@ -197,19 +187,21 @@ func (_mock *MockAccessPoint) GetPropertyHWAddress() (string, error) {
var r0 string
var r1 error
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -230,8 +222,8 @@ func (_c *MockAccessPoint_GetPropertyHWAddress_Call) Run(run func()) *MockAccess
return _c
}
func (_c *MockAccessPoint_GetPropertyHWAddress_Call) Return(s string, err error) *MockAccessPoint_GetPropertyHWAddress_Call {
_c.Call.Return(s, err)
func (_c *MockAccessPoint_GetPropertyHWAddress_Call) Return(_a0 string, _a1 error) *MockAccessPoint_GetPropertyHWAddress_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -240,9 +232,9 @@ func (_c *MockAccessPoint_GetPropertyHWAddress_Call) RunAndReturn(run func() (st
return _c
}
// GetPropertyLastSeen provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) GetPropertyLastSeen() (int32, error) {
ret := _mock.Called()
// GetPropertyLastSeen provides a mock function with no fields
func (_m *MockAccessPoint) GetPropertyLastSeen() (int32, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyLastSeen")
@@ -250,19 +242,21 @@ func (_mock *MockAccessPoint) GetPropertyLastSeen() (int32, error) {
var r0 int32
var r1 error
if returnFunc, ok := ret.Get(0).(func() (int32, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (int32, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() int32); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() int32); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(int32)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -283,8 +277,8 @@ func (_c *MockAccessPoint_GetPropertyLastSeen_Call) Run(run func()) *MockAccessP
return _c
}
func (_c *MockAccessPoint_GetPropertyLastSeen_Call) Return(n int32, err error) *MockAccessPoint_GetPropertyLastSeen_Call {
_c.Call.Return(n, err)
func (_c *MockAccessPoint_GetPropertyLastSeen_Call) Return(_a0 int32, _a1 error) *MockAccessPoint_GetPropertyLastSeen_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -293,9 +287,9 @@ func (_c *MockAccessPoint_GetPropertyLastSeen_Call) RunAndReturn(run func() (int
return _c
}
// GetPropertyMaxBitrate provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) GetPropertyMaxBitrate() (uint32, error) {
ret := _mock.Called()
// GetPropertyMaxBitrate provides a mock function with no fields
func (_m *MockAccessPoint) GetPropertyMaxBitrate() (uint32, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyMaxBitrate")
@@ -303,19 +297,21 @@ func (_mock *MockAccessPoint) GetPropertyMaxBitrate() (uint32, error) {
var r0 uint32
var r1 error
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() uint32); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(uint32)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -336,8 +332,8 @@ func (_c *MockAccessPoint_GetPropertyMaxBitrate_Call) Run(run func()) *MockAcces
return _c
}
func (_c *MockAccessPoint_GetPropertyMaxBitrate_Call) Return(v uint32, err error) *MockAccessPoint_GetPropertyMaxBitrate_Call {
_c.Call.Return(v, err)
func (_c *MockAccessPoint_GetPropertyMaxBitrate_Call) Return(_a0 uint32, _a1 error) *MockAccessPoint_GetPropertyMaxBitrate_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -346,9 +342,9 @@ func (_c *MockAccessPoint_GetPropertyMaxBitrate_Call) RunAndReturn(run func() (u
return _c
}
// GetPropertyMode provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) GetPropertyMode() (gonetworkmanager.Nm80211Mode, error) {
ret := _mock.Called()
// GetPropertyMode provides a mock function with no fields
func (_m *MockAccessPoint) GetPropertyMode() (gonetworkmanager.Nm80211Mode, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyMode")
@@ -356,19 +352,21 @@ func (_mock *MockAccessPoint) GetPropertyMode() (gonetworkmanager.Nm80211Mode, e
var r0 gonetworkmanager.Nm80211Mode
var r1 error
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.Nm80211Mode, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (gonetworkmanager.Nm80211Mode, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.Nm80211Mode); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() gonetworkmanager.Nm80211Mode); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(gonetworkmanager.Nm80211Mode)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -389,8 +387,8 @@ func (_c *MockAccessPoint_GetPropertyMode_Call) Run(run func()) *MockAccessPoint
return _c
}
func (_c *MockAccessPoint_GetPropertyMode_Call) Return(nm80211Mode gonetworkmanager.Nm80211Mode, err error) *MockAccessPoint_GetPropertyMode_Call {
_c.Call.Return(nm80211Mode, err)
func (_c *MockAccessPoint_GetPropertyMode_Call) Return(_a0 gonetworkmanager.Nm80211Mode, _a1 error) *MockAccessPoint_GetPropertyMode_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -399,9 +397,9 @@ func (_c *MockAccessPoint_GetPropertyMode_Call) RunAndReturn(run func() (gonetwo
return _c
}
// GetPropertyRSNFlags provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) GetPropertyRSNFlags() (uint32, error) {
ret := _mock.Called()
// GetPropertyRSNFlags provides a mock function with no fields
func (_m *MockAccessPoint) GetPropertyRSNFlags() (uint32, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyRSNFlags")
@@ -409,19 +407,21 @@ func (_mock *MockAccessPoint) GetPropertyRSNFlags() (uint32, error) {
var r0 uint32
var r1 error
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() uint32); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(uint32)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -442,8 +442,8 @@ func (_c *MockAccessPoint_GetPropertyRSNFlags_Call) Run(run func()) *MockAccessP
return _c
}
func (_c *MockAccessPoint_GetPropertyRSNFlags_Call) Return(v uint32, err error) *MockAccessPoint_GetPropertyRSNFlags_Call {
_c.Call.Return(v, err)
func (_c *MockAccessPoint_GetPropertyRSNFlags_Call) Return(_a0 uint32, _a1 error) *MockAccessPoint_GetPropertyRSNFlags_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -452,9 +452,9 @@ func (_c *MockAccessPoint_GetPropertyRSNFlags_Call) RunAndReturn(run func() (uin
return _c
}
// GetPropertySSID provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) GetPropertySSID() (string, error) {
ret := _mock.Called()
// GetPropertySSID provides a mock function with no fields
func (_m *MockAccessPoint) GetPropertySSID() (string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertySSID")
@@ -462,19 +462,21 @@ func (_mock *MockAccessPoint) GetPropertySSID() (string, error) {
var r0 string
var r1 error
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -495,8 +497,8 @@ func (_c *MockAccessPoint_GetPropertySSID_Call) Run(run func()) *MockAccessPoint
return _c
}
func (_c *MockAccessPoint_GetPropertySSID_Call) Return(s string, err error) *MockAccessPoint_GetPropertySSID_Call {
_c.Call.Return(s, err)
func (_c *MockAccessPoint_GetPropertySSID_Call) Return(_a0 string, _a1 error) *MockAccessPoint_GetPropertySSID_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -505,9 +507,9 @@ func (_c *MockAccessPoint_GetPropertySSID_Call) RunAndReturn(run func() (string,
return _c
}
// GetPropertyStrength provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) GetPropertyStrength() (uint8, error) {
ret := _mock.Called()
// GetPropertyStrength provides a mock function with no fields
func (_m *MockAccessPoint) GetPropertyStrength() (uint8, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyStrength")
@@ -515,19 +517,21 @@ func (_mock *MockAccessPoint) GetPropertyStrength() (uint8, error) {
var r0 uint8
var r1 error
if returnFunc, ok := ret.Get(0).(func() (uint8, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (uint8, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() uint8); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() uint8); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(uint8)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -548,8 +552,8 @@ func (_c *MockAccessPoint_GetPropertyStrength_Call) Run(run func()) *MockAccessP
return _c
}
func (_c *MockAccessPoint_GetPropertyStrength_Call) Return(v uint8, err error) *MockAccessPoint_GetPropertyStrength_Call {
_c.Call.Return(v, err)
func (_c *MockAccessPoint_GetPropertyStrength_Call) Return(_a0 uint8, _a1 error) *MockAccessPoint_GetPropertyStrength_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -558,9 +562,9 @@ func (_c *MockAccessPoint_GetPropertyStrength_Call) RunAndReturn(run func() (uin
return _c
}
// GetPropertyWPAFlags provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) GetPropertyWPAFlags() (uint32, error) {
ret := _mock.Called()
// GetPropertyWPAFlags provides a mock function with no fields
func (_m *MockAccessPoint) GetPropertyWPAFlags() (uint32, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyWPAFlags")
@@ -568,19 +572,21 @@ func (_mock *MockAccessPoint) GetPropertyWPAFlags() (uint32, error) {
var r0 uint32
var r1 error
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() uint32); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(uint32)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -601,8 +607,8 @@ func (_c *MockAccessPoint_GetPropertyWPAFlags_Call) Run(run func()) *MockAccessP
return _c
}
func (_c *MockAccessPoint_GetPropertyWPAFlags_Call) Return(v uint32, err error) *MockAccessPoint_GetPropertyWPAFlags_Call {
_c.Call.Return(v, err)
func (_c *MockAccessPoint_GetPropertyWPAFlags_Call) Return(_a0 uint32, _a1 error) *MockAccessPoint_GetPropertyWPAFlags_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -611,9 +617,9 @@ func (_c *MockAccessPoint_GetPropertyWPAFlags_Call) RunAndReturn(run func() (uin
return _c
}
// MarshalJSON provides a mock function for the type MockAccessPoint
func (_mock *MockAccessPoint) MarshalJSON() ([]byte, error) {
ret := _mock.Called()
// MarshalJSON provides a mock function with no fields
func (_m *MockAccessPoint) MarshalJSON() ([]byte, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for MarshalJSON")
@@ -621,21 +627,23 @@ func (_mock *MockAccessPoint) MarshalJSON() ([]byte, error) {
var r0 []byte
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]byte, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]byte, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []byte); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []byte); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]byte)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -656,8 +664,8 @@ func (_c *MockAccessPoint_MarshalJSON_Call) Run(run func()) *MockAccessPoint_Mar
return _c
}
func (_c *MockAccessPoint_MarshalJSON_Call) Return(bytes []byte, err error) *MockAccessPoint_MarshalJSON_Call {
_c.Call.Return(bytes, err)
func (_c *MockAccessPoint_MarshalJSON_Call) Return(_a0 []byte, _a1 error) *MockAccessPoint_MarshalJSON_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -665,3 +673,17 @@ func (_c *MockAccessPoint_MarshalJSON_Call) RunAndReturn(run func() ([]byte, err
_c.Call.Return(run)
return _c
}
// NewMockAccessPoint creates a new instance of MockAccessPoint. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockAccessPoint(t interface {
mock.TestingT
Cleanup(func())
}) *MockAccessPoint {
mock := &MockAccessPoint{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
@@ -1,29 +1,14 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package gonetworkmanager
import (
"github.com/Wifx/gonetworkmanager/v2"
"github.com/godbus/dbus/v5"
gonetworkmanager "github.com/Wifx/gonetworkmanager/v2"
dbus "github.com/godbus/dbus/v5"
mock "github.com/stretchr/testify/mock"
)
// NewMockActiveConnection creates a new instance of MockActiveConnection. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockActiveConnection(t interface {
mock.TestingT
Cleanup(func())
}) *MockActiveConnection {
mock := &MockActiveConnection{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockActiveConnection is an autogenerated mock type for the ActiveConnection type
type MockActiveConnection struct {
mock.Mock
@@ -37,20 +22,21 @@ func (_m *MockActiveConnection) EXPECT() *MockActiveConnection_Expecter {
return &MockActiveConnection_Expecter{mock: &_m.Mock}
}
// GetPath provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPath() dbus.ObjectPath {
ret := _mock.Called()
// GetPath provides a mock function with no fields
func (_m *MockActiveConnection) GetPath() dbus.ObjectPath {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPath")
}
var r0 dbus.ObjectPath
if returnFunc, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(dbus.ObjectPath)
}
return r0
}
@@ -71,8 +57,8 @@ func (_c *MockActiveConnection_GetPath_Call) Run(run func()) *MockActiveConnecti
return _c
}
func (_c *MockActiveConnection_GetPath_Call) Return(objectPath dbus.ObjectPath) *MockActiveConnection_GetPath_Call {
_c.Call.Return(objectPath)
func (_c *MockActiveConnection_GetPath_Call) Return(_a0 dbus.ObjectPath) *MockActiveConnection_GetPath_Call {
_c.Call.Return(_a0)
return _c
}
@@ -81,9 +67,9 @@ func (_c *MockActiveConnection_GetPath_Call) RunAndReturn(run func() dbus.Object
return _c
}
// GetPropertyConnection provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyConnection() (gonetworkmanager.Connection, error) {
ret := _mock.Called()
// GetPropertyConnection provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyConnection() (gonetworkmanager.Connection, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyConnection")
@@ -91,21 +77,23 @@ func (_mock *MockActiveConnection) GetPropertyConnection() (gonetworkmanager.Con
var r0 gonetworkmanager.Connection
var r1 error
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.Connection, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (gonetworkmanager.Connection, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.Connection); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() gonetworkmanager.Connection); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.Connection)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -126,8 +114,8 @@ func (_c *MockActiveConnection_GetPropertyConnection_Call) Run(run func()) *Mock
return _c
}
func (_c *MockActiveConnection_GetPropertyConnection_Call) Return(connection gonetworkmanager.Connection, err error) *MockActiveConnection_GetPropertyConnection_Call {
_c.Call.Return(connection, err)
func (_c *MockActiveConnection_GetPropertyConnection_Call) Return(_a0 gonetworkmanager.Connection, _a1 error) *MockActiveConnection_GetPropertyConnection_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -136,9 +124,9 @@ func (_c *MockActiveConnection_GetPropertyConnection_Call) RunAndReturn(run func
return _c
}
// GetPropertyDHCP4Config provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyDHCP4Config() (gonetworkmanager.DHCP4Config, error) {
ret := _mock.Called()
// GetPropertyDHCP4Config provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyDHCP4Config() (gonetworkmanager.DHCP4Config, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyDHCP4Config")
@@ -146,21 +134,23 @@ func (_mock *MockActiveConnection) GetPropertyDHCP4Config() (gonetworkmanager.DH
var r0 gonetworkmanager.DHCP4Config
var r1 error
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.DHCP4Config, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (gonetworkmanager.DHCP4Config, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.DHCP4Config); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() gonetworkmanager.DHCP4Config); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.DHCP4Config)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -181,8 +171,8 @@ func (_c *MockActiveConnection_GetPropertyDHCP4Config_Call) Run(run func()) *Moc
return _c
}
func (_c *MockActiveConnection_GetPropertyDHCP4Config_Call) Return(dHCP4Config gonetworkmanager.DHCP4Config, err error) *MockActiveConnection_GetPropertyDHCP4Config_Call {
_c.Call.Return(dHCP4Config, err)
func (_c *MockActiveConnection_GetPropertyDHCP4Config_Call) Return(_a0 gonetworkmanager.DHCP4Config, _a1 error) *MockActiveConnection_GetPropertyDHCP4Config_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -191,9 +181,9 @@ func (_c *MockActiveConnection_GetPropertyDHCP4Config_Call) RunAndReturn(run fun
return _c
}
// GetPropertyDHCP6Config provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyDHCP6Config() (gonetworkmanager.DHCP6Config, error) {
ret := _mock.Called()
// GetPropertyDHCP6Config provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyDHCP6Config() (gonetworkmanager.DHCP6Config, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyDHCP6Config")
@@ -201,21 +191,23 @@ func (_mock *MockActiveConnection) GetPropertyDHCP6Config() (gonetworkmanager.DH
var r0 gonetworkmanager.DHCP6Config
var r1 error
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.DHCP6Config, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (gonetworkmanager.DHCP6Config, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.DHCP6Config); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() gonetworkmanager.DHCP6Config); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.DHCP6Config)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -236,8 +228,8 @@ func (_c *MockActiveConnection_GetPropertyDHCP6Config_Call) Run(run func()) *Moc
return _c
}
func (_c *MockActiveConnection_GetPropertyDHCP6Config_Call) Return(dHCP6Config gonetworkmanager.DHCP6Config, err error) *MockActiveConnection_GetPropertyDHCP6Config_Call {
_c.Call.Return(dHCP6Config, err)
func (_c *MockActiveConnection_GetPropertyDHCP6Config_Call) Return(_a0 gonetworkmanager.DHCP6Config, _a1 error) *MockActiveConnection_GetPropertyDHCP6Config_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -246,9 +238,9 @@ func (_c *MockActiveConnection_GetPropertyDHCP6Config_Call) RunAndReturn(run fun
return _c
}
// GetPropertyDefault provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyDefault() (bool, error) {
ret := _mock.Called()
// GetPropertyDefault provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyDefault() (bool, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyDefault")
@@ -256,19 +248,21 @@ func (_mock *MockActiveConnection) GetPropertyDefault() (bool, error) {
var r0 bool
var r1 error
if returnFunc, ok := ret.Get(0).(func() (bool, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (bool, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() bool); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() bool); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(bool)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -289,8 +283,8 @@ func (_c *MockActiveConnection_GetPropertyDefault_Call) Run(run func()) *MockAct
return _c
}
func (_c *MockActiveConnection_GetPropertyDefault_Call) Return(b bool, err error) *MockActiveConnection_GetPropertyDefault_Call {
_c.Call.Return(b, err)
func (_c *MockActiveConnection_GetPropertyDefault_Call) Return(_a0 bool, _a1 error) *MockActiveConnection_GetPropertyDefault_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -299,9 +293,9 @@ func (_c *MockActiveConnection_GetPropertyDefault_Call) RunAndReturn(run func()
return _c
}
// GetPropertyDefault6 provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyDefault6() (bool, error) {
ret := _mock.Called()
// GetPropertyDefault6 provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyDefault6() (bool, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyDefault6")
@@ -309,19 +303,21 @@ func (_mock *MockActiveConnection) GetPropertyDefault6() (bool, error) {
var r0 bool
var r1 error
if returnFunc, ok := ret.Get(0).(func() (bool, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (bool, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() bool); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() bool); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(bool)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -342,8 +338,8 @@ func (_c *MockActiveConnection_GetPropertyDefault6_Call) Run(run func()) *MockAc
return _c
}
func (_c *MockActiveConnection_GetPropertyDefault6_Call) Return(b bool, err error) *MockActiveConnection_GetPropertyDefault6_Call {
_c.Call.Return(b, err)
func (_c *MockActiveConnection_GetPropertyDefault6_Call) Return(_a0 bool, _a1 error) *MockActiveConnection_GetPropertyDefault6_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -352,9 +348,9 @@ func (_c *MockActiveConnection_GetPropertyDefault6_Call) RunAndReturn(run func()
return _c
}
// GetPropertyDevices provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyDevices() ([]gonetworkmanager.Device, error) {
ret := _mock.Called()
// GetPropertyDevices provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyDevices() ([]gonetworkmanager.Device, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyDevices")
@@ -362,21 +358,23 @@ func (_mock *MockActiveConnection) GetPropertyDevices() ([]gonetworkmanager.Devi
var r0 []gonetworkmanager.Device
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.Device, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.Device, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.Device); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []gonetworkmanager.Device); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]gonetworkmanager.Device)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -397,8 +395,8 @@ func (_c *MockActiveConnection_GetPropertyDevices_Call) Run(run func()) *MockAct
return _c
}
func (_c *MockActiveConnection_GetPropertyDevices_Call) Return(devices []gonetworkmanager.Device, err error) *MockActiveConnection_GetPropertyDevices_Call {
_c.Call.Return(devices, err)
func (_c *MockActiveConnection_GetPropertyDevices_Call) Return(_a0 []gonetworkmanager.Device, _a1 error) *MockActiveConnection_GetPropertyDevices_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -407,9 +405,9 @@ func (_c *MockActiveConnection_GetPropertyDevices_Call) RunAndReturn(run func()
return _c
}
// GetPropertyID provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyID() (string, error) {
ret := _mock.Called()
// GetPropertyID provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyID() (string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyID")
@@ -417,19 +415,21 @@ func (_mock *MockActiveConnection) GetPropertyID() (string, error) {
var r0 string
var r1 error
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -450,8 +450,8 @@ func (_c *MockActiveConnection_GetPropertyID_Call) Run(run func()) *MockActiveCo
return _c
}
func (_c *MockActiveConnection_GetPropertyID_Call) Return(s string, err error) *MockActiveConnection_GetPropertyID_Call {
_c.Call.Return(s, err)
func (_c *MockActiveConnection_GetPropertyID_Call) Return(_a0 string, _a1 error) *MockActiveConnection_GetPropertyID_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -460,9 +460,9 @@ func (_c *MockActiveConnection_GetPropertyID_Call) RunAndReturn(run func() (stri
return _c
}
// GetPropertyIP4Config provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyIP4Config() (gonetworkmanager.IP4Config, error) {
ret := _mock.Called()
// GetPropertyIP4Config provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyIP4Config() (gonetworkmanager.IP4Config, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyIP4Config")
@@ -470,21 +470,23 @@ func (_mock *MockActiveConnection) GetPropertyIP4Config() (gonetworkmanager.IP4C
var r0 gonetworkmanager.IP4Config
var r1 error
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.IP4Config, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (gonetworkmanager.IP4Config, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.IP4Config); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() gonetworkmanager.IP4Config); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.IP4Config)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -505,8 +507,8 @@ func (_c *MockActiveConnection_GetPropertyIP4Config_Call) Run(run func()) *MockA
return _c
}
func (_c *MockActiveConnection_GetPropertyIP4Config_Call) Return(iP4Config gonetworkmanager.IP4Config, err error) *MockActiveConnection_GetPropertyIP4Config_Call {
_c.Call.Return(iP4Config, err)
func (_c *MockActiveConnection_GetPropertyIP4Config_Call) Return(_a0 gonetworkmanager.IP4Config, _a1 error) *MockActiveConnection_GetPropertyIP4Config_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -515,9 +517,9 @@ func (_c *MockActiveConnection_GetPropertyIP4Config_Call) RunAndReturn(run func(
return _c
}
// GetPropertyIP6Config provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyIP6Config() (gonetworkmanager.IP6Config, error) {
ret := _mock.Called()
// GetPropertyIP6Config provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyIP6Config() (gonetworkmanager.IP6Config, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyIP6Config")
@@ -525,21 +527,23 @@ func (_mock *MockActiveConnection) GetPropertyIP6Config() (gonetworkmanager.IP6C
var r0 gonetworkmanager.IP6Config
var r1 error
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.IP6Config, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (gonetworkmanager.IP6Config, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.IP6Config); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() gonetworkmanager.IP6Config); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.IP6Config)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -560,8 +564,8 @@ func (_c *MockActiveConnection_GetPropertyIP6Config_Call) Run(run func()) *MockA
return _c
}
func (_c *MockActiveConnection_GetPropertyIP6Config_Call) Return(iP6Config gonetworkmanager.IP6Config, err error) *MockActiveConnection_GetPropertyIP6Config_Call {
_c.Call.Return(iP6Config, err)
func (_c *MockActiveConnection_GetPropertyIP6Config_Call) Return(_a0 gonetworkmanager.IP6Config, _a1 error) *MockActiveConnection_GetPropertyIP6Config_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -570,9 +574,9 @@ func (_c *MockActiveConnection_GetPropertyIP6Config_Call) RunAndReturn(run func(
return _c
}
// GetPropertyMaster provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyMaster() (gonetworkmanager.Device, error) {
ret := _mock.Called()
// GetPropertyMaster provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyMaster() (gonetworkmanager.Device, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyMaster")
@@ -580,21 +584,23 @@ func (_mock *MockActiveConnection) GetPropertyMaster() (gonetworkmanager.Device,
var r0 gonetworkmanager.Device
var r1 error
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.Device, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (gonetworkmanager.Device, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.Device); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() gonetworkmanager.Device); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.Device)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -615,8 +621,8 @@ func (_c *MockActiveConnection_GetPropertyMaster_Call) Run(run func()) *MockActi
return _c
}
func (_c *MockActiveConnection_GetPropertyMaster_Call) Return(device gonetworkmanager.Device, err error) *MockActiveConnection_GetPropertyMaster_Call {
_c.Call.Return(device, err)
func (_c *MockActiveConnection_GetPropertyMaster_Call) Return(_a0 gonetworkmanager.Device, _a1 error) *MockActiveConnection_GetPropertyMaster_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -625,9 +631,9 @@ func (_c *MockActiveConnection_GetPropertyMaster_Call) RunAndReturn(run func() (
return _c
}
// GetPropertySpecificObject provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertySpecificObject() (gonetworkmanager.AccessPoint, error) {
ret := _mock.Called()
// GetPropertySpecificObject provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertySpecificObject() (gonetworkmanager.AccessPoint, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertySpecificObject")
@@ -635,21 +641,23 @@ func (_mock *MockActiveConnection) GetPropertySpecificObject() (gonetworkmanager
var r0 gonetworkmanager.AccessPoint
var r1 error
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.AccessPoint, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (gonetworkmanager.AccessPoint, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.AccessPoint); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() gonetworkmanager.AccessPoint); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.AccessPoint)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -670,8 +678,8 @@ func (_c *MockActiveConnection_GetPropertySpecificObject_Call) Run(run func()) *
return _c
}
func (_c *MockActiveConnection_GetPropertySpecificObject_Call) Return(accessPoint gonetworkmanager.AccessPoint, err error) *MockActiveConnection_GetPropertySpecificObject_Call {
_c.Call.Return(accessPoint, err)
func (_c *MockActiveConnection_GetPropertySpecificObject_Call) Return(_a0 gonetworkmanager.AccessPoint, _a1 error) *MockActiveConnection_GetPropertySpecificObject_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -680,9 +688,9 @@ func (_c *MockActiveConnection_GetPropertySpecificObject_Call) RunAndReturn(run
return _c
}
// GetPropertyState provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyState() (gonetworkmanager.NmActiveConnectionState, error) {
ret := _mock.Called()
// GetPropertyState provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyState() (gonetworkmanager.NmActiveConnectionState, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyState")
@@ -690,19 +698,21 @@ func (_mock *MockActiveConnection) GetPropertyState() (gonetworkmanager.NmActive
var r0 gonetworkmanager.NmActiveConnectionState
var r1 error
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.NmActiveConnectionState, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (gonetworkmanager.NmActiveConnectionState, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.NmActiveConnectionState); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() gonetworkmanager.NmActiveConnectionState); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(gonetworkmanager.NmActiveConnectionState)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -723,8 +733,8 @@ func (_c *MockActiveConnection_GetPropertyState_Call) Run(run func()) *MockActiv
return _c
}
func (_c *MockActiveConnection_GetPropertyState_Call) Return(nmActiveConnectionState gonetworkmanager.NmActiveConnectionState, err error) *MockActiveConnection_GetPropertyState_Call {
_c.Call.Return(nmActiveConnectionState, err)
func (_c *MockActiveConnection_GetPropertyState_Call) Return(_a0 gonetworkmanager.NmActiveConnectionState, _a1 error) *MockActiveConnection_GetPropertyState_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -733,9 +743,9 @@ func (_c *MockActiveConnection_GetPropertyState_Call) RunAndReturn(run func() (g
return _c
}
// GetPropertyStateFlags provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyStateFlags() (uint32, error) {
ret := _mock.Called()
// GetPropertyStateFlags provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyStateFlags() (uint32, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyStateFlags")
@@ -743,19 +753,21 @@ func (_mock *MockActiveConnection) GetPropertyStateFlags() (uint32, error) {
var r0 uint32
var r1 error
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() uint32); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(uint32)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -776,8 +788,8 @@ func (_c *MockActiveConnection_GetPropertyStateFlags_Call) Run(run func()) *Mock
return _c
}
func (_c *MockActiveConnection_GetPropertyStateFlags_Call) Return(v uint32, err error) *MockActiveConnection_GetPropertyStateFlags_Call {
_c.Call.Return(v, err)
func (_c *MockActiveConnection_GetPropertyStateFlags_Call) Return(_a0 uint32, _a1 error) *MockActiveConnection_GetPropertyStateFlags_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -786,9 +798,9 @@ func (_c *MockActiveConnection_GetPropertyStateFlags_Call) RunAndReturn(run func
return _c
}
// GetPropertyType provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyType() (string, error) {
ret := _mock.Called()
// GetPropertyType provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyType() (string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyType")
@@ -796,19 +808,21 @@ func (_mock *MockActiveConnection) GetPropertyType() (string, error) {
var r0 string
var r1 error
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -829,8 +843,8 @@ func (_c *MockActiveConnection_GetPropertyType_Call) Run(run func()) *MockActive
return _c
}
func (_c *MockActiveConnection_GetPropertyType_Call) Return(s string, err error) *MockActiveConnection_GetPropertyType_Call {
_c.Call.Return(s, err)
func (_c *MockActiveConnection_GetPropertyType_Call) Return(_a0 string, _a1 error) *MockActiveConnection_GetPropertyType_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -839,9 +853,9 @@ func (_c *MockActiveConnection_GetPropertyType_Call) RunAndReturn(run func() (st
return _c
}
// GetPropertyUUID provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyUUID() (string, error) {
ret := _mock.Called()
// GetPropertyUUID provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyUUID() (string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyUUID")
@@ -849,19 +863,21 @@ func (_mock *MockActiveConnection) GetPropertyUUID() (string, error) {
var r0 string
var r1 error
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -882,8 +898,8 @@ func (_c *MockActiveConnection_GetPropertyUUID_Call) Run(run func()) *MockActive
return _c
}
func (_c *MockActiveConnection_GetPropertyUUID_Call) Return(s string, err error) *MockActiveConnection_GetPropertyUUID_Call {
_c.Call.Return(s, err)
func (_c *MockActiveConnection_GetPropertyUUID_Call) Return(_a0 string, _a1 error) *MockActiveConnection_GetPropertyUUID_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -892,9 +908,9 @@ func (_c *MockActiveConnection_GetPropertyUUID_Call) RunAndReturn(run func() (st
return _c
}
// GetPropertyVPN provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) GetPropertyVPN() (bool, error) {
ret := _mock.Called()
// GetPropertyVPN provides a mock function with no fields
func (_m *MockActiveConnection) GetPropertyVPN() (bool, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyVPN")
@@ -902,19 +918,21 @@ func (_mock *MockActiveConnection) GetPropertyVPN() (bool, error) {
var r0 bool
var r1 error
if returnFunc, ok := ret.Get(0).(func() (bool, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (bool, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() bool); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() bool); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(bool)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -935,8 +953,8 @@ func (_c *MockActiveConnection_GetPropertyVPN_Call) Run(run func()) *MockActiveC
return _c
}
func (_c *MockActiveConnection_GetPropertyVPN_Call) Return(b bool, err error) *MockActiveConnection_GetPropertyVPN_Call {
_c.Call.Return(b, err)
func (_c *MockActiveConnection_GetPropertyVPN_Call) Return(_a0 bool, _a1 error) *MockActiveConnection_GetPropertyVPN_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -945,20 +963,21 @@ func (_c *MockActiveConnection_GetPropertyVPN_Call) RunAndReturn(run func() (boo
return _c
}
// SubscribeState provides a mock function for the type MockActiveConnection
func (_mock *MockActiveConnection) SubscribeState(receiver chan gonetworkmanager.StateChange, exit chan struct{}) error {
ret := _mock.Called(receiver, exit)
// SubscribeState provides a mock function with given fields: receiver, exit
func (_m *MockActiveConnection) SubscribeState(receiver chan gonetworkmanager.StateChange, exit chan struct{}) error {
ret := _m.Called(receiver, exit)
if len(ret) == 0 {
panic("no return value specified for SubscribeState")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(chan gonetworkmanager.StateChange, chan struct{}) error); ok {
r0 = returnFunc(receiver, exit)
if rf, ok := ret.Get(0).(func(chan gonetworkmanager.StateChange, chan struct{}) error); ok {
r0 = rf(receiver, exit)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -970,24 +989,13 @@ type MockActiveConnection_SubscribeState_Call struct {
// SubscribeState is a helper method to define mock.On call
// - receiver chan gonetworkmanager.StateChange
// - exit chan struct{}
func (_e *MockActiveConnection_Expecter) SubscribeState(receiver any, exit any) *MockActiveConnection_SubscribeState_Call {
func (_e *MockActiveConnection_Expecter) SubscribeState(receiver interface{}, exit interface{}) *MockActiveConnection_SubscribeState_Call {
return &MockActiveConnection_SubscribeState_Call{Call: _e.mock.On("SubscribeState", receiver, exit)}
}
func (_c *MockActiveConnection_SubscribeState_Call) Run(run func(receiver chan gonetworkmanager.StateChange, exit chan struct{})) *MockActiveConnection_SubscribeState_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 chan gonetworkmanager.StateChange
if args[0] != nil {
arg0 = args[0].(chan gonetworkmanager.StateChange)
}
var arg1 chan struct{}
if args[1] != nil {
arg1 = args[1].(chan struct{})
}
run(
arg0,
arg1,
)
run(args[0].(chan gonetworkmanager.StateChange), args[1].(chan struct{}))
})
return _c
}
@@ -997,7 +1005,21 @@ func (_c *MockActiveConnection_SubscribeState_Call) Return(err error) *MockActiv
return _c
}
func (_c *MockActiveConnection_SubscribeState_Call) RunAndReturn(run func(receiver chan gonetworkmanager.StateChange, exit chan struct{}) error) *MockActiveConnection_SubscribeState_Call {
func (_c *MockActiveConnection_SubscribeState_Call) RunAndReturn(run func(chan gonetworkmanager.StateChange, chan struct{}) error) *MockActiveConnection_SubscribeState_Call {
_c.Call.Return(run)
return _c
}
// NewMockActiveConnection creates a new instance of MockActiveConnection. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockActiveConnection(t interface {
mock.TestingT
Cleanup(func())
}) *MockActiveConnection {
mock := &MockActiveConnection{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
@@ -1,29 +1,14 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package gonetworkmanager
import (
"github.com/Wifx/gonetworkmanager/v2"
"github.com/godbus/dbus/v5"
gonetworkmanager "github.com/Wifx/gonetworkmanager/v2"
dbus "github.com/godbus/dbus/v5"
mock "github.com/stretchr/testify/mock"
)
// NewMockConnection creates a new instance of MockConnection. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockConnection(t interface {
mock.TestingT
Cleanup(func())
}) *MockConnection {
mock := &MockConnection{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockConnection is an autogenerated mock type for the Connection type
type MockConnection struct {
mock.Mock
@@ -37,20 +22,21 @@ func (_m *MockConnection) EXPECT() *MockConnection_Expecter {
return &MockConnection_Expecter{mock: &_m.Mock}
}
// ClearSecrets provides a mock function for the type MockConnection
func (_mock *MockConnection) ClearSecrets() error {
ret := _mock.Called()
// ClearSecrets provides a mock function with no fields
func (_m *MockConnection) ClearSecrets() error {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for ClearSecrets")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func() error); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() error); ok {
r0 = rf()
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -71,8 +57,8 @@ func (_c *MockConnection_ClearSecrets_Call) Run(run func()) *MockConnection_Clea
return _c
}
func (_c *MockConnection_ClearSecrets_Call) Return(err error) *MockConnection_ClearSecrets_Call {
_c.Call.Return(err)
func (_c *MockConnection_ClearSecrets_Call) Return(_a0 error) *MockConnection_ClearSecrets_Call {
_c.Call.Return(_a0)
return _c
}
@@ -81,20 +67,21 @@ func (_c *MockConnection_ClearSecrets_Call) RunAndReturn(run func() error) *Mock
return _c
}
// Delete provides a mock function for the type MockConnection
func (_mock *MockConnection) Delete() error {
ret := _mock.Called()
// Delete provides a mock function with no fields
func (_m *MockConnection) Delete() error {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Delete")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func() error); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() error); ok {
r0 = rf()
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -115,8 +102,8 @@ func (_c *MockConnection_Delete_Call) Run(run func()) *MockConnection_Delete_Cal
return _c
}
func (_c *MockConnection_Delete_Call) Return(err error) *MockConnection_Delete_Call {
_c.Call.Return(err)
func (_c *MockConnection_Delete_Call) Return(_a0 error) *MockConnection_Delete_Call {
_c.Call.Return(_a0)
return _c
}
@@ -125,20 +112,21 @@ func (_c *MockConnection_Delete_Call) RunAndReturn(run func() error) *MockConnec
return _c
}
// GetPath provides a mock function for the type MockConnection
func (_mock *MockConnection) GetPath() dbus.ObjectPath {
ret := _mock.Called()
// GetPath provides a mock function with no fields
func (_m *MockConnection) GetPath() dbus.ObjectPath {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPath")
}
var r0 dbus.ObjectPath
if returnFunc, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(dbus.ObjectPath)
}
return r0
}
@@ -159,8 +147,8 @@ func (_c *MockConnection_GetPath_Call) Run(run func()) *MockConnection_GetPath_C
return _c
}
func (_c *MockConnection_GetPath_Call) Return(objectPath dbus.ObjectPath) *MockConnection_GetPath_Call {
_c.Call.Return(objectPath)
func (_c *MockConnection_GetPath_Call) Return(_a0 dbus.ObjectPath) *MockConnection_GetPath_Call {
_c.Call.Return(_a0)
return _c
}
@@ -169,9 +157,9 @@ func (_c *MockConnection_GetPath_Call) RunAndReturn(run func() dbus.ObjectPath)
return _c
}
// GetPropertyFilename provides a mock function for the type MockConnection
func (_mock *MockConnection) GetPropertyFilename() (string, error) {
ret := _mock.Called()
// GetPropertyFilename provides a mock function with no fields
func (_m *MockConnection) GetPropertyFilename() (string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyFilename")
@@ -179,19 +167,21 @@ func (_mock *MockConnection) GetPropertyFilename() (string, error) {
var r0 string
var r1 error
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -212,8 +202,8 @@ func (_c *MockConnection_GetPropertyFilename_Call) Run(run func()) *MockConnecti
return _c
}
func (_c *MockConnection_GetPropertyFilename_Call) Return(s string, err error) *MockConnection_GetPropertyFilename_Call {
_c.Call.Return(s, err)
func (_c *MockConnection_GetPropertyFilename_Call) Return(_a0 string, _a1 error) *MockConnection_GetPropertyFilename_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -222,9 +212,9 @@ func (_c *MockConnection_GetPropertyFilename_Call) RunAndReturn(run func() (stri
return _c
}
// GetPropertyFlags provides a mock function for the type MockConnection
func (_mock *MockConnection) GetPropertyFlags() (uint32, error) {
ret := _mock.Called()
// GetPropertyFlags provides a mock function with no fields
func (_m *MockConnection) GetPropertyFlags() (uint32, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyFlags")
@@ -232,19 +222,21 @@ func (_mock *MockConnection) GetPropertyFlags() (uint32, error) {
var r0 uint32
var r1 error
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() uint32); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(uint32)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -265,8 +257,8 @@ func (_c *MockConnection_GetPropertyFlags_Call) Run(run func()) *MockConnection_
return _c
}
func (_c *MockConnection_GetPropertyFlags_Call) Return(v uint32, err error) *MockConnection_GetPropertyFlags_Call {
_c.Call.Return(v, err)
func (_c *MockConnection_GetPropertyFlags_Call) Return(_a0 uint32, _a1 error) *MockConnection_GetPropertyFlags_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -275,9 +267,9 @@ func (_c *MockConnection_GetPropertyFlags_Call) RunAndReturn(run func() (uint32,
return _c
}
// GetPropertyUnsaved provides a mock function for the type MockConnection
func (_mock *MockConnection) GetPropertyUnsaved() (bool, error) {
ret := _mock.Called()
// GetPropertyUnsaved provides a mock function with no fields
func (_m *MockConnection) GetPropertyUnsaved() (bool, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyUnsaved")
@@ -285,19 +277,21 @@ func (_mock *MockConnection) GetPropertyUnsaved() (bool, error) {
var r0 bool
var r1 error
if returnFunc, ok := ret.Get(0).(func() (bool, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (bool, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() bool); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() bool); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(bool)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -318,8 +312,8 @@ func (_c *MockConnection_GetPropertyUnsaved_Call) Run(run func()) *MockConnectio
return _c
}
func (_c *MockConnection_GetPropertyUnsaved_Call) Return(b bool, err error) *MockConnection_GetPropertyUnsaved_Call {
_c.Call.Return(b, err)
func (_c *MockConnection_GetPropertyUnsaved_Call) Return(_a0 bool, _a1 error) *MockConnection_GetPropertyUnsaved_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -328,9 +322,9 @@ func (_c *MockConnection_GetPropertyUnsaved_Call) RunAndReturn(run func() (bool,
return _c
}
// GetSecrets provides a mock function for the type MockConnection
func (_mock *MockConnection) GetSecrets(settingName string) (gonetworkmanager.ConnectionSettings, error) {
ret := _mock.Called(settingName)
// GetSecrets provides a mock function with given fields: settingName
func (_m *MockConnection) GetSecrets(settingName string) (gonetworkmanager.ConnectionSettings, error) {
ret := _m.Called(settingName)
if len(ret) == 0 {
panic("no return value specified for GetSecrets")
@@ -338,21 +332,23 @@ func (_mock *MockConnection) GetSecrets(settingName string) (gonetworkmanager.Co
var r0 gonetworkmanager.ConnectionSettings
var r1 error
if returnFunc, ok := ret.Get(0).(func(string) (gonetworkmanager.ConnectionSettings, error)); ok {
return returnFunc(settingName)
if rf, ok := ret.Get(0).(func(string) (gonetworkmanager.ConnectionSettings, error)); ok {
return rf(settingName)
}
if returnFunc, ok := ret.Get(0).(func(string) gonetworkmanager.ConnectionSettings); ok {
r0 = returnFunc(settingName)
if rf, ok := ret.Get(0).(func(string) gonetworkmanager.ConnectionSettings); ok {
r0 = rf(settingName)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.ConnectionSettings)
}
}
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
r1 = returnFunc(settingName)
if rf, ok := ret.Get(1).(func(string) error); ok {
r1 = rf(settingName)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -363,36 +359,30 @@ type MockConnection_GetSecrets_Call struct {
// GetSecrets is a helper method to define mock.On call
// - settingName string
func (_e *MockConnection_Expecter) GetSecrets(settingName any) *MockConnection_GetSecrets_Call {
func (_e *MockConnection_Expecter) GetSecrets(settingName interface{}) *MockConnection_GetSecrets_Call {
return &MockConnection_GetSecrets_Call{Call: _e.mock.On("GetSecrets", settingName)}
}
func (_c *MockConnection_GetSecrets_Call) Run(run func(settingName string)) *MockConnection_GetSecrets_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockConnection_GetSecrets_Call) Return(connectionSettings gonetworkmanager.ConnectionSettings, err error) *MockConnection_GetSecrets_Call {
_c.Call.Return(connectionSettings, err)
func (_c *MockConnection_GetSecrets_Call) Return(_a0 gonetworkmanager.ConnectionSettings, _a1 error) *MockConnection_GetSecrets_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockConnection_GetSecrets_Call) RunAndReturn(run func(settingName string) (gonetworkmanager.ConnectionSettings, error)) *MockConnection_GetSecrets_Call {
func (_c *MockConnection_GetSecrets_Call) RunAndReturn(run func(string) (gonetworkmanager.ConnectionSettings, error)) *MockConnection_GetSecrets_Call {
_c.Call.Return(run)
return _c
}
// GetSettings provides a mock function for the type MockConnection
func (_mock *MockConnection) GetSettings() (gonetworkmanager.ConnectionSettings, error) {
ret := _mock.Called()
// GetSettings provides a mock function with no fields
func (_m *MockConnection) GetSettings() (gonetworkmanager.ConnectionSettings, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetSettings")
@@ -400,21 +390,23 @@ func (_mock *MockConnection) GetSettings() (gonetworkmanager.ConnectionSettings,
var r0 gonetworkmanager.ConnectionSettings
var r1 error
if returnFunc, ok := ret.Get(0).(func() (gonetworkmanager.ConnectionSettings, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (gonetworkmanager.ConnectionSettings, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() gonetworkmanager.ConnectionSettings); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() gonetworkmanager.ConnectionSettings); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.ConnectionSettings)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -435,8 +427,8 @@ func (_c *MockConnection_GetSettings_Call) Run(run func()) *MockConnection_GetSe
return _c
}
func (_c *MockConnection_GetSettings_Call) Return(connectionSettings gonetworkmanager.ConnectionSettings, err error) *MockConnection_GetSettings_Call {
_c.Call.Return(connectionSettings, err)
func (_c *MockConnection_GetSettings_Call) Return(_a0 gonetworkmanager.ConnectionSettings, _a1 error) *MockConnection_GetSettings_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -445,9 +437,9 @@ func (_c *MockConnection_GetSettings_Call) RunAndReturn(run func() (gonetworkman
return _c
}
// MarshalJSON provides a mock function for the type MockConnection
func (_mock *MockConnection) MarshalJSON() ([]byte, error) {
ret := _mock.Called()
// MarshalJSON provides a mock function with no fields
func (_m *MockConnection) MarshalJSON() ([]byte, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for MarshalJSON")
@@ -455,21 +447,23 @@ func (_mock *MockConnection) MarshalJSON() ([]byte, error) {
var r0 []byte
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]byte, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]byte, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []byte); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []byte); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]byte)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -490,8 +484,8 @@ func (_c *MockConnection_MarshalJSON_Call) Run(run func()) *MockConnection_Marsh
return _c
}
func (_c *MockConnection_MarshalJSON_Call) Return(bytes []byte, err error) *MockConnection_MarshalJSON_Call {
_c.Call.Return(bytes, err)
func (_c *MockConnection_MarshalJSON_Call) Return(_a0 []byte, _a1 error) *MockConnection_MarshalJSON_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -500,20 +494,21 @@ func (_c *MockConnection_MarshalJSON_Call) RunAndReturn(run func() ([]byte, erro
return _c
}
// Save provides a mock function for the type MockConnection
func (_mock *MockConnection) Save() error {
ret := _mock.Called()
// Save provides a mock function with no fields
func (_m *MockConnection) Save() error {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Save")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func() error); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() error); ok {
r0 = rf()
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -534,8 +529,8 @@ func (_c *MockConnection_Save_Call) Run(run func()) *MockConnection_Save_Call {
return _c
}
func (_c *MockConnection_Save_Call) Return(err error) *MockConnection_Save_Call {
_c.Call.Return(err)
func (_c *MockConnection_Save_Call) Return(_a0 error) *MockConnection_Save_Call {
_c.Call.Return(_a0)
return _c
}
@@ -544,20 +539,21 @@ func (_c *MockConnection_Save_Call) RunAndReturn(run func() error) *MockConnecti
return _c
}
// Update provides a mock function for the type MockConnection
func (_mock *MockConnection) Update(settings gonetworkmanager.ConnectionSettings) error {
ret := _mock.Called(settings)
// Update provides a mock function with given fields: settings
func (_m *MockConnection) Update(settings gonetworkmanager.ConnectionSettings) error {
ret := _m.Called(settings)
if len(ret) == 0 {
panic("no return value specified for Update")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) error); ok {
r0 = returnFunc(settings)
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) error); ok {
r0 = rf(settings)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -568,47 +564,42 @@ type MockConnection_Update_Call struct {
// Update is a helper method to define mock.On call
// - settings gonetworkmanager.ConnectionSettings
func (_e *MockConnection_Expecter) Update(settings any) *MockConnection_Update_Call {
func (_e *MockConnection_Expecter) Update(settings interface{}) *MockConnection_Update_Call {
return &MockConnection_Update_Call{Call: _e.mock.On("Update", settings)}
}
func (_c *MockConnection_Update_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockConnection_Update_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 gonetworkmanager.ConnectionSettings
if args[0] != nil {
arg0 = args[0].(gonetworkmanager.ConnectionSettings)
}
run(
arg0,
)
run(args[0].(gonetworkmanager.ConnectionSettings))
})
return _c
}
func (_c *MockConnection_Update_Call) Return(err error) *MockConnection_Update_Call {
_c.Call.Return(err)
func (_c *MockConnection_Update_Call) Return(_a0 error) *MockConnection_Update_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockConnection_Update_Call) RunAndReturn(run func(settings gonetworkmanager.ConnectionSettings) error) *MockConnection_Update_Call {
func (_c *MockConnection_Update_Call) RunAndReturn(run func(gonetworkmanager.ConnectionSettings) error) *MockConnection_Update_Call {
_c.Call.Return(run)
return _c
}
// UpdateUnsaved provides a mock function for the type MockConnection
func (_mock *MockConnection) UpdateUnsaved(settings gonetworkmanager.ConnectionSettings) error {
ret := _mock.Called(settings)
// UpdateUnsaved provides a mock function with given fields: settings
func (_m *MockConnection) UpdateUnsaved(settings gonetworkmanager.ConnectionSettings) error {
ret := _m.Called(settings)
if len(ret) == 0 {
panic("no return value specified for UpdateUnsaved")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) error); ok {
r0 = returnFunc(settings)
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) error); ok {
r0 = rf(settings)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -619,29 +610,37 @@ type MockConnection_UpdateUnsaved_Call struct {
// UpdateUnsaved is a helper method to define mock.On call
// - settings gonetworkmanager.ConnectionSettings
func (_e *MockConnection_Expecter) UpdateUnsaved(settings any) *MockConnection_UpdateUnsaved_Call {
func (_e *MockConnection_Expecter) UpdateUnsaved(settings interface{}) *MockConnection_UpdateUnsaved_Call {
return &MockConnection_UpdateUnsaved_Call{Call: _e.mock.On("UpdateUnsaved", settings)}
}
func (_c *MockConnection_UpdateUnsaved_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockConnection_UpdateUnsaved_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 gonetworkmanager.ConnectionSettings
if args[0] != nil {
arg0 = args[0].(gonetworkmanager.ConnectionSettings)
}
run(
arg0,
)
run(args[0].(gonetworkmanager.ConnectionSettings))
})
return _c
}
func (_c *MockConnection_UpdateUnsaved_Call) Return(err error) *MockConnection_UpdateUnsaved_Call {
_c.Call.Return(err)
func (_c *MockConnection_UpdateUnsaved_Call) Return(_a0 error) *MockConnection_UpdateUnsaved_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockConnection_UpdateUnsaved_Call) RunAndReturn(run func(settings gonetworkmanager.ConnectionSettings) error) *MockConnection_UpdateUnsaved_Call {
func (_c *MockConnection_UpdateUnsaved_Call) RunAndReturn(run func(gonetworkmanager.ConnectionSettings) error) *MockConnection_UpdateUnsaved_Call {
_c.Call.Return(run)
return _c
}
// NewMockConnection creates a new instance of MockConnection. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockConnection(t interface {
mock.TestingT
Cleanup(func())
}) *MockConnection {
mock := &MockConnection{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,28 +1,12 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package gonetworkmanager
import (
"github.com/Wifx/gonetworkmanager/v2"
gonetworkmanager "github.com/Wifx/gonetworkmanager/v2"
mock "github.com/stretchr/testify/mock"
)
// NewMockIP4Config creates a new instance of MockIP4Config. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockIP4Config(t interface {
mock.TestingT
Cleanup(func())
}) *MockIP4Config {
mock := &MockIP4Config{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockIP4Config is an autogenerated mock type for the IP4Config type
type MockIP4Config struct {
mock.Mock
@@ -36,9 +20,9 @@ func (_m *MockIP4Config) EXPECT() *MockIP4Config_Expecter {
return &MockIP4Config_Expecter{mock: &_m.Mock}
}
// GetPropertyAddressData provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertyAddressData() ([]gonetworkmanager.IP4AddressData, error) {
ret := _mock.Called()
// GetPropertyAddressData provides a mock function with no fields
func (_m *MockIP4Config) GetPropertyAddressData() ([]gonetworkmanager.IP4AddressData, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyAddressData")
@@ -46,21 +30,23 @@ func (_mock *MockIP4Config) GetPropertyAddressData() ([]gonetworkmanager.IP4Addr
var r0 []gonetworkmanager.IP4AddressData
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4AddressData, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4AddressData, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.IP4AddressData); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []gonetworkmanager.IP4AddressData); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]gonetworkmanager.IP4AddressData)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -81,8 +67,8 @@ func (_c *MockIP4Config_GetPropertyAddressData_Call) Run(run func()) *MockIP4Con
return _c
}
func (_c *MockIP4Config_GetPropertyAddressData_Call) Return(iP4AddressDatas []gonetworkmanager.IP4AddressData, err error) *MockIP4Config_GetPropertyAddressData_Call {
_c.Call.Return(iP4AddressDatas, err)
func (_c *MockIP4Config_GetPropertyAddressData_Call) Return(_a0 []gonetworkmanager.IP4AddressData, _a1 error) *MockIP4Config_GetPropertyAddressData_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -91,9 +77,9 @@ func (_c *MockIP4Config_GetPropertyAddressData_Call) RunAndReturn(run func() ([]
return _c
}
// GetPropertyAddresses provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertyAddresses() ([]gonetworkmanager.IP4Address, error) {
ret := _mock.Called()
// GetPropertyAddresses provides a mock function with no fields
func (_m *MockIP4Config) GetPropertyAddresses() ([]gonetworkmanager.IP4Address, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyAddresses")
@@ -101,21 +87,23 @@ func (_mock *MockIP4Config) GetPropertyAddresses() ([]gonetworkmanager.IP4Addres
var r0 []gonetworkmanager.IP4Address
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4Address, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4Address, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.IP4Address); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []gonetworkmanager.IP4Address); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]gonetworkmanager.IP4Address)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -136,8 +124,8 @@ func (_c *MockIP4Config_GetPropertyAddresses_Call) Run(run func()) *MockIP4Confi
return _c
}
func (_c *MockIP4Config_GetPropertyAddresses_Call) Return(iP4Addresss []gonetworkmanager.IP4Address, err error) *MockIP4Config_GetPropertyAddresses_Call {
_c.Call.Return(iP4Addresss, err)
func (_c *MockIP4Config_GetPropertyAddresses_Call) Return(_a0 []gonetworkmanager.IP4Address, _a1 error) *MockIP4Config_GetPropertyAddresses_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -146,9 +134,9 @@ func (_c *MockIP4Config_GetPropertyAddresses_Call) RunAndReturn(run func() ([]go
return _c
}
// GetPropertyDnsOptions provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertyDnsOptions() ([]string, error) {
ret := _mock.Called()
// GetPropertyDnsOptions provides a mock function with no fields
func (_m *MockIP4Config) GetPropertyDnsOptions() ([]string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyDnsOptions")
@@ -156,21 +144,23 @@ func (_mock *MockIP4Config) GetPropertyDnsOptions() ([]string, error) {
var r0 []string
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []string); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]string)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -191,8 +181,8 @@ func (_c *MockIP4Config_GetPropertyDnsOptions_Call) Run(run func()) *MockIP4Conf
return _c
}
func (_c *MockIP4Config_GetPropertyDnsOptions_Call) Return(strings []string, err error) *MockIP4Config_GetPropertyDnsOptions_Call {
_c.Call.Return(strings, err)
func (_c *MockIP4Config_GetPropertyDnsOptions_Call) Return(_a0 []string, _a1 error) *MockIP4Config_GetPropertyDnsOptions_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -201,9 +191,9 @@ func (_c *MockIP4Config_GetPropertyDnsOptions_Call) RunAndReturn(run func() ([]s
return _c
}
// GetPropertyDnsPriority provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertyDnsPriority() (uint32, error) {
ret := _mock.Called()
// GetPropertyDnsPriority provides a mock function with no fields
func (_m *MockIP4Config) GetPropertyDnsPriority() (uint32, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyDnsPriority")
@@ -211,19 +201,21 @@ func (_mock *MockIP4Config) GetPropertyDnsPriority() (uint32, error) {
var r0 uint32
var r1 error
if returnFunc, ok := ret.Get(0).(func() (uint32, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (uint32, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() uint32); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() uint32); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(uint32)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -244,8 +236,8 @@ func (_c *MockIP4Config_GetPropertyDnsPriority_Call) Run(run func()) *MockIP4Con
return _c
}
func (_c *MockIP4Config_GetPropertyDnsPriority_Call) Return(v uint32, err error) *MockIP4Config_GetPropertyDnsPriority_Call {
_c.Call.Return(v, err)
func (_c *MockIP4Config_GetPropertyDnsPriority_Call) Return(_a0 uint32, _a1 error) *MockIP4Config_GetPropertyDnsPriority_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -254,9 +246,9 @@ func (_c *MockIP4Config_GetPropertyDnsPriority_Call) RunAndReturn(run func() (ui
return _c
}
// GetPropertyDomains provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertyDomains() ([]string, error) {
ret := _mock.Called()
// GetPropertyDomains provides a mock function with no fields
func (_m *MockIP4Config) GetPropertyDomains() ([]string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyDomains")
@@ -264,21 +256,23 @@ func (_mock *MockIP4Config) GetPropertyDomains() ([]string, error) {
var r0 []string
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []string); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]string)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -299,8 +293,8 @@ func (_c *MockIP4Config_GetPropertyDomains_Call) Run(run func()) *MockIP4Config_
return _c
}
func (_c *MockIP4Config_GetPropertyDomains_Call) Return(strings []string, err error) *MockIP4Config_GetPropertyDomains_Call {
_c.Call.Return(strings, err)
func (_c *MockIP4Config_GetPropertyDomains_Call) Return(_a0 []string, _a1 error) *MockIP4Config_GetPropertyDomains_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -309,9 +303,9 @@ func (_c *MockIP4Config_GetPropertyDomains_Call) RunAndReturn(run func() ([]stri
return _c
}
// GetPropertyGateway provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertyGateway() (string, error) {
ret := _mock.Called()
// GetPropertyGateway provides a mock function with no fields
func (_m *MockIP4Config) GetPropertyGateway() (string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyGateway")
@@ -319,19 +313,21 @@ func (_mock *MockIP4Config) GetPropertyGateway() (string, error) {
var r0 string
var r1 error
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -352,8 +348,8 @@ func (_c *MockIP4Config_GetPropertyGateway_Call) Run(run func()) *MockIP4Config_
return _c
}
func (_c *MockIP4Config_GetPropertyGateway_Call) Return(s string, err error) *MockIP4Config_GetPropertyGateway_Call {
_c.Call.Return(s, err)
func (_c *MockIP4Config_GetPropertyGateway_Call) Return(_a0 string, _a1 error) *MockIP4Config_GetPropertyGateway_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -362,9 +358,9 @@ func (_c *MockIP4Config_GetPropertyGateway_Call) RunAndReturn(run func() (string
return _c
}
// GetPropertyNameserverData provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertyNameserverData() ([]gonetworkmanager.IP4NameserverData, error) {
ret := _mock.Called()
// GetPropertyNameserverData provides a mock function with no fields
func (_m *MockIP4Config) GetPropertyNameserverData() ([]gonetworkmanager.IP4NameserverData, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyNameserverData")
@@ -372,21 +368,23 @@ func (_mock *MockIP4Config) GetPropertyNameserverData() ([]gonetworkmanager.IP4N
var r0 []gonetworkmanager.IP4NameserverData
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4NameserverData, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4NameserverData, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.IP4NameserverData); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []gonetworkmanager.IP4NameserverData); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]gonetworkmanager.IP4NameserverData)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -407,8 +405,8 @@ func (_c *MockIP4Config_GetPropertyNameserverData_Call) Run(run func()) *MockIP4
return _c
}
func (_c *MockIP4Config_GetPropertyNameserverData_Call) Return(iP4NameserverDatas []gonetworkmanager.IP4NameserverData, err error) *MockIP4Config_GetPropertyNameserverData_Call {
_c.Call.Return(iP4NameserverDatas, err)
func (_c *MockIP4Config_GetPropertyNameserverData_Call) Return(_a0 []gonetworkmanager.IP4NameserverData, _a1 error) *MockIP4Config_GetPropertyNameserverData_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -417,9 +415,9 @@ func (_c *MockIP4Config_GetPropertyNameserverData_Call) RunAndReturn(run func()
return _c
}
// GetPropertyNameservers provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertyNameservers() ([]string, error) {
ret := _mock.Called()
// GetPropertyNameservers provides a mock function with no fields
func (_m *MockIP4Config) GetPropertyNameservers() ([]string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyNameservers")
@@ -427,21 +425,23 @@ func (_mock *MockIP4Config) GetPropertyNameservers() ([]string, error) {
var r0 []string
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []string); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]string)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -462,8 +462,8 @@ func (_c *MockIP4Config_GetPropertyNameservers_Call) Run(run func()) *MockIP4Con
return _c
}
func (_c *MockIP4Config_GetPropertyNameservers_Call) Return(strings []string, err error) *MockIP4Config_GetPropertyNameservers_Call {
_c.Call.Return(strings, err)
func (_c *MockIP4Config_GetPropertyNameservers_Call) Return(_a0 []string, _a1 error) *MockIP4Config_GetPropertyNameservers_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -472,9 +472,9 @@ func (_c *MockIP4Config_GetPropertyNameservers_Call) RunAndReturn(run func() ([]
return _c
}
// GetPropertyRouteData provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertyRouteData() ([]gonetworkmanager.IP4RouteData, error) {
ret := _mock.Called()
// GetPropertyRouteData provides a mock function with no fields
func (_m *MockIP4Config) GetPropertyRouteData() ([]gonetworkmanager.IP4RouteData, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyRouteData")
@@ -482,21 +482,23 @@ func (_mock *MockIP4Config) GetPropertyRouteData() ([]gonetworkmanager.IP4RouteD
var r0 []gonetworkmanager.IP4RouteData
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4RouteData, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4RouteData, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.IP4RouteData); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []gonetworkmanager.IP4RouteData); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]gonetworkmanager.IP4RouteData)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -517,8 +519,8 @@ func (_c *MockIP4Config_GetPropertyRouteData_Call) Run(run func()) *MockIP4Confi
return _c
}
func (_c *MockIP4Config_GetPropertyRouteData_Call) Return(iP4RouteDatas []gonetworkmanager.IP4RouteData, err error) *MockIP4Config_GetPropertyRouteData_Call {
_c.Call.Return(iP4RouteDatas, err)
func (_c *MockIP4Config_GetPropertyRouteData_Call) Return(_a0 []gonetworkmanager.IP4RouteData, _a1 error) *MockIP4Config_GetPropertyRouteData_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -527,9 +529,9 @@ func (_c *MockIP4Config_GetPropertyRouteData_Call) RunAndReturn(run func() ([]go
return _c
}
// GetPropertyRoutes provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertyRoutes() ([]gonetworkmanager.IP4Route, error) {
ret := _mock.Called()
// GetPropertyRoutes provides a mock function with no fields
func (_m *MockIP4Config) GetPropertyRoutes() ([]gonetworkmanager.IP4Route, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyRoutes")
@@ -537,21 +539,23 @@ func (_mock *MockIP4Config) GetPropertyRoutes() ([]gonetworkmanager.IP4Route, er
var r0 []gonetworkmanager.IP4Route
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4Route, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.IP4Route, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.IP4Route); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []gonetworkmanager.IP4Route); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]gonetworkmanager.IP4Route)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -572,8 +576,8 @@ func (_c *MockIP4Config_GetPropertyRoutes_Call) Run(run func()) *MockIP4Config_G
return _c
}
func (_c *MockIP4Config_GetPropertyRoutes_Call) Return(iP4Routes []gonetworkmanager.IP4Route, err error) *MockIP4Config_GetPropertyRoutes_Call {
_c.Call.Return(iP4Routes, err)
func (_c *MockIP4Config_GetPropertyRoutes_Call) Return(_a0 []gonetworkmanager.IP4Route, _a1 error) *MockIP4Config_GetPropertyRoutes_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -582,9 +586,9 @@ func (_c *MockIP4Config_GetPropertyRoutes_Call) RunAndReturn(run func() ([]gonet
return _c
}
// GetPropertySearches provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertySearches() ([]string, error) {
ret := _mock.Called()
// GetPropertySearches provides a mock function with no fields
func (_m *MockIP4Config) GetPropertySearches() ([]string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertySearches")
@@ -592,21 +596,23 @@ func (_mock *MockIP4Config) GetPropertySearches() ([]string, error) {
var r0 []string
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []string); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]string)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -627,8 +633,8 @@ func (_c *MockIP4Config_GetPropertySearches_Call) Run(run func()) *MockIP4Config
return _c
}
func (_c *MockIP4Config_GetPropertySearches_Call) Return(strings []string, err error) *MockIP4Config_GetPropertySearches_Call {
_c.Call.Return(strings, err)
func (_c *MockIP4Config_GetPropertySearches_Call) Return(_a0 []string, _a1 error) *MockIP4Config_GetPropertySearches_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -637,9 +643,9 @@ func (_c *MockIP4Config_GetPropertySearches_Call) RunAndReturn(run func() ([]str
return _c
}
// GetPropertyWinsServerData provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) GetPropertyWinsServerData() ([]string, error) {
ret := _mock.Called()
// GetPropertyWinsServerData provides a mock function with no fields
func (_m *MockIP4Config) GetPropertyWinsServerData() ([]string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyWinsServerData")
@@ -647,21 +653,23 @@ func (_mock *MockIP4Config) GetPropertyWinsServerData() ([]string, error) {
var r0 []string
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []string); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]string)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -682,8 +690,8 @@ func (_c *MockIP4Config_GetPropertyWinsServerData_Call) Run(run func()) *MockIP4
return _c
}
func (_c *MockIP4Config_GetPropertyWinsServerData_Call) Return(strings []string, err error) *MockIP4Config_GetPropertyWinsServerData_Call {
_c.Call.Return(strings, err)
func (_c *MockIP4Config_GetPropertyWinsServerData_Call) Return(_a0 []string, _a1 error) *MockIP4Config_GetPropertyWinsServerData_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -692,9 +700,9 @@ func (_c *MockIP4Config_GetPropertyWinsServerData_Call) RunAndReturn(run func()
return _c
}
// MarshalJSON provides a mock function for the type MockIP4Config
func (_mock *MockIP4Config) MarshalJSON() ([]byte, error) {
ret := _mock.Called()
// MarshalJSON provides a mock function with no fields
func (_m *MockIP4Config) MarshalJSON() ([]byte, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for MarshalJSON")
@@ -702,21 +710,23 @@ func (_mock *MockIP4Config) MarshalJSON() ([]byte, error) {
var r0 []byte
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]byte, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]byte, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []byte); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []byte); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]byte)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -737,8 +747,8 @@ func (_c *MockIP4Config_MarshalJSON_Call) Run(run func()) *MockIP4Config_Marshal
return _c
}
func (_c *MockIP4Config_MarshalJSON_Call) Return(bytes []byte, err error) *MockIP4Config_MarshalJSON_Call {
_c.Call.Return(bytes, err)
func (_c *MockIP4Config_MarshalJSON_Call) Return(_a0 []byte, _a1 error) *MockIP4Config_MarshalJSON_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -746,3 +756,17 @@ func (_c *MockIP4Config_MarshalJSON_Call) RunAndReturn(run func() ([]byte, error
_c.Call.Return(run)
return _c
}
// NewMockIP4Config creates a new instance of MockIP4Config. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockIP4Config(t interface {
mock.TestingT
Cleanup(func())
}) *MockIP4Config {
mock := &MockIP4Config{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
File diff suppressed because it is too large Load Diff
@@ -1,28 +1,12 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package gonetworkmanager
import (
"github.com/Wifx/gonetworkmanager/v2"
gonetworkmanager "github.com/Wifx/gonetworkmanager/v2"
mock "github.com/stretchr/testify/mock"
)
// NewMockSettings creates a new instance of MockSettings. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockSettings(t interface {
mock.TestingT
Cleanup(func())
}) *MockSettings {
mock := &MockSettings{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockSettings is an autogenerated mock type for the Settings type
type MockSettings struct {
mock.Mock
@@ -36,9 +20,9 @@ func (_m *MockSettings) EXPECT() *MockSettings_Expecter {
return &MockSettings_Expecter{mock: &_m.Mock}
}
// AddConnection provides a mock function for the type MockSettings
func (_mock *MockSettings) AddConnection(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error) {
ret := _mock.Called(settings)
// AddConnection provides a mock function with given fields: settings
func (_m *MockSettings) AddConnection(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error) {
ret := _m.Called(settings)
if len(ret) == 0 {
panic("no return value specified for AddConnection")
@@ -46,21 +30,23 @@ func (_mock *MockSettings) AddConnection(settings gonetworkmanager.ConnectionSet
var r0 gonetworkmanager.Connection
var r1 error
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)); ok {
return returnFunc(settings)
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)); ok {
return rf(settings)
}
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) gonetworkmanager.Connection); ok {
r0 = returnFunc(settings)
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) gonetworkmanager.Connection); ok {
r0 = rf(settings)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.Connection)
}
}
if returnFunc, ok := ret.Get(1).(func(gonetworkmanager.ConnectionSettings) error); ok {
r1 = returnFunc(settings)
if rf, ok := ret.Get(1).(func(gonetworkmanager.ConnectionSettings) error); ok {
r1 = rf(settings)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -71,36 +57,30 @@ type MockSettings_AddConnection_Call struct {
// AddConnection is a helper method to define mock.On call
// - settings gonetworkmanager.ConnectionSettings
func (_e *MockSettings_Expecter) AddConnection(settings any) *MockSettings_AddConnection_Call {
func (_e *MockSettings_Expecter) AddConnection(settings interface{}) *MockSettings_AddConnection_Call {
return &MockSettings_AddConnection_Call{Call: _e.mock.On("AddConnection", settings)}
}
func (_c *MockSettings_AddConnection_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockSettings_AddConnection_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 gonetworkmanager.ConnectionSettings
if args[0] != nil {
arg0 = args[0].(gonetworkmanager.ConnectionSettings)
}
run(
arg0,
)
run(args[0].(gonetworkmanager.ConnectionSettings))
})
return _c
}
func (_c *MockSettings_AddConnection_Call) Return(connection gonetworkmanager.Connection, err error) *MockSettings_AddConnection_Call {
_c.Call.Return(connection, err)
func (_c *MockSettings_AddConnection_Call) Return(_a0 gonetworkmanager.Connection, _a1 error) *MockSettings_AddConnection_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockSettings_AddConnection_Call) RunAndReturn(run func(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)) *MockSettings_AddConnection_Call {
func (_c *MockSettings_AddConnection_Call) RunAndReturn(run func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)) *MockSettings_AddConnection_Call {
_c.Call.Return(run)
return _c
}
// AddConnectionUnsaved provides a mock function for the type MockSettings
func (_mock *MockSettings) AddConnectionUnsaved(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error) {
ret := _mock.Called(settings)
// AddConnectionUnsaved provides a mock function with given fields: settings
func (_m *MockSettings) AddConnectionUnsaved(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error) {
ret := _m.Called(settings)
if len(ret) == 0 {
panic("no return value specified for AddConnectionUnsaved")
@@ -108,21 +88,23 @@ func (_mock *MockSettings) AddConnectionUnsaved(settings gonetworkmanager.Connec
var r0 gonetworkmanager.Connection
var r1 error
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)); ok {
return returnFunc(settings)
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)); ok {
return rf(settings)
}
if returnFunc, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) gonetworkmanager.Connection); ok {
r0 = returnFunc(settings)
if rf, ok := ret.Get(0).(func(gonetworkmanager.ConnectionSettings) gonetworkmanager.Connection); ok {
r0 = rf(settings)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.Connection)
}
}
if returnFunc, ok := ret.Get(1).(func(gonetworkmanager.ConnectionSettings) error); ok {
r1 = returnFunc(settings)
if rf, ok := ret.Get(1).(func(gonetworkmanager.ConnectionSettings) error); ok {
r1 = rf(settings)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -133,36 +115,30 @@ type MockSettings_AddConnectionUnsaved_Call struct {
// AddConnectionUnsaved is a helper method to define mock.On call
// - settings gonetworkmanager.ConnectionSettings
func (_e *MockSettings_Expecter) AddConnectionUnsaved(settings any) *MockSettings_AddConnectionUnsaved_Call {
func (_e *MockSettings_Expecter) AddConnectionUnsaved(settings interface{}) *MockSettings_AddConnectionUnsaved_Call {
return &MockSettings_AddConnectionUnsaved_Call{Call: _e.mock.On("AddConnectionUnsaved", settings)}
}
func (_c *MockSettings_AddConnectionUnsaved_Call) Run(run func(settings gonetworkmanager.ConnectionSettings)) *MockSettings_AddConnectionUnsaved_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 gonetworkmanager.ConnectionSettings
if args[0] != nil {
arg0 = args[0].(gonetworkmanager.ConnectionSettings)
}
run(
arg0,
)
run(args[0].(gonetworkmanager.ConnectionSettings))
})
return _c
}
func (_c *MockSettings_AddConnectionUnsaved_Call) Return(connection gonetworkmanager.Connection, err error) *MockSettings_AddConnectionUnsaved_Call {
_c.Call.Return(connection, err)
func (_c *MockSettings_AddConnectionUnsaved_Call) Return(_a0 gonetworkmanager.Connection, _a1 error) *MockSettings_AddConnectionUnsaved_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockSettings_AddConnectionUnsaved_Call) RunAndReturn(run func(settings gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)) *MockSettings_AddConnectionUnsaved_Call {
func (_c *MockSettings_AddConnectionUnsaved_Call) RunAndReturn(run func(gonetworkmanager.ConnectionSettings) (gonetworkmanager.Connection, error)) *MockSettings_AddConnectionUnsaved_Call {
_c.Call.Return(run)
return _c
}
// GetConnectionByUUID provides a mock function for the type MockSettings
func (_mock *MockSettings) GetConnectionByUUID(uuid string) (gonetworkmanager.Connection, error) {
ret := _mock.Called(uuid)
// GetConnectionByUUID provides a mock function with given fields: uuid
func (_m *MockSettings) GetConnectionByUUID(uuid string) (gonetworkmanager.Connection, error) {
ret := _m.Called(uuid)
if len(ret) == 0 {
panic("no return value specified for GetConnectionByUUID")
@@ -170,21 +146,23 @@ func (_mock *MockSettings) GetConnectionByUUID(uuid string) (gonetworkmanager.Co
var r0 gonetworkmanager.Connection
var r1 error
if returnFunc, ok := ret.Get(0).(func(string) (gonetworkmanager.Connection, error)); ok {
return returnFunc(uuid)
if rf, ok := ret.Get(0).(func(string) (gonetworkmanager.Connection, error)); ok {
return rf(uuid)
}
if returnFunc, ok := ret.Get(0).(func(string) gonetworkmanager.Connection); ok {
r0 = returnFunc(uuid)
if rf, ok := ret.Get(0).(func(string) gonetworkmanager.Connection); ok {
r0 = rf(uuid)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(gonetworkmanager.Connection)
}
}
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
r1 = returnFunc(uuid)
if rf, ok := ret.Get(1).(func(string) error); ok {
r1 = rf(uuid)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -195,36 +173,30 @@ type MockSettings_GetConnectionByUUID_Call struct {
// GetConnectionByUUID is a helper method to define mock.On call
// - uuid string
func (_e *MockSettings_Expecter) GetConnectionByUUID(uuid any) *MockSettings_GetConnectionByUUID_Call {
func (_e *MockSettings_Expecter) GetConnectionByUUID(uuid interface{}) *MockSettings_GetConnectionByUUID_Call {
return &MockSettings_GetConnectionByUUID_Call{Call: _e.mock.On("GetConnectionByUUID", uuid)}
}
func (_c *MockSettings_GetConnectionByUUID_Call) Run(run func(uuid string)) *MockSettings_GetConnectionByUUID_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockSettings_GetConnectionByUUID_Call) Return(connection gonetworkmanager.Connection, err error) *MockSettings_GetConnectionByUUID_Call {
_c.Call.Return(connection, err)
func (_c *MockSettings_GetConnectionByUUID_Call) Return(_a0 gonetworkmanager.Connection, _a1 error) *MockSettings_GetConnectionByUUID_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockSettings_GetConnectionByUUID_Call) RunAndReturn(run func(uuid string) (gonetworkmanager.Connection, error)) *MockSettings_GetConnectionByUUID_Call {
func (_c *MockSettings_GetConnectionByUUID_Call) RunAndReturn(run func(string) (gonetworkmanager.Connection, error)) *MockSettings_GetConnectionByUUID_Call {
_c.Call.Return(run)
return _c
}
// GetPropertyCanModify provides a mock function for the type MockSettings
func (_mock *MockSettings) GetPropertyCanModify() (bool, error) {
ret := _mock.Called()
// GetPropertyCanModify provides a mock function with no fields
func (_m *MockSettings) GetPropertyCanModify() (bool, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyCanModify")
@@ -232,19 +204,21 @@ func (_mock *MockSettings) GetPropertyCanModify() (bool, error) {
var r0 bool
var r1 error
if returnFunc, ok := ret.Get(0).(func() (bool, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (bool, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() bool); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() bool); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(bool)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -265,8 +239,8 @@ func (_c *MockSettings_GetPropertyCanModify_Call) Run(run func()) *MockSettings_
return _c
}
func (_c *MockSettings_GetPropertyCanModify_Call) Return(b bool, err error) *MockSettings_GetPropertyCanModify_Call {
_c.Call.Return(b, err)
func (_c *MockSettings_GetPropertyCanModify_Call) Return(_a0 bool, _a1 error) *MockSettings_GetPropertyCanModify_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -275,9 +249,9 @@ func (_c *MockSettings_GetPropertyCanModify_Call) RunAndReturn(run func() (bool,
return _c
}
// GetPropertyHostname provides a mock function for the type MockSettings
func (_mock *MockSettings) GetPropertyHostname() (string, error) {
ret := _mock.Called()
// GetPropertyHostname provides a mock function with no fields
func (_m *MockSettings) GetPropertyHostname() (string, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetPropertyHostname")
@@ -285,19 +259,21 @@ func (_mock *MockSettings) GetPropertyHostname() (string, error) {
var r0 string
var r1 error
if returnFunc, ok := ret.Get(0).(func() (string, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (string, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -318,8 +294,8 @@ func (_c *MockSettings_GetPropertyHostname_Call) Run(run func()) *MockSettings_G
return _c
}
func (_c *MockSettings_GetPropertyHostname_Call) Return(s string, err error) *MockSettings_GetPropertyHostname_Call {
_c.Call.Return(s, err)
func (_c *MockSettings_GetPropertyHostname_Call) Return(_a0 string, _a1 error) *MockSettings_GetPropertyHostname_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -328,9 +304,9 @@ func (_c *MockSettings_GetPropertyHostname_Call) RunAndReturn(run func() (string
return _c
}
// ListConnections provides a mock function for the type MockSettings
func (_mock *MockSettings) ListConnections() ([]gonetworkmanager.Connection, error) {
ret := _mock.Called()
// ListConnections provides a mock function with no fields
func (_m *MockSettings) ListConnections() ([]gonetworkmanager.Connection, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for ListConnections")
@@ -338,21 +314,23 @@ func (_mock *MockSettings) ListConnections() ([]gonetworkmanager.Connection, err
var r0 []gonetworkmanager.Connection
var r1 error
if returnFunc, ok := ret.Get(0).(func() ([]gonetworkmanager.Connection, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() ([]gonetworkmanager.Connection, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() []gonetworkmanager.Connection); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() []gonetworkmanager.Connection); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).([]gonetworkmanager.Connection)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -373,8 +351,8 @@ func (_c *MockSettings_ListConnections_Call) Run(run func()) *MockSettings_ListC
return _c
}
func (_c *MockSettings_ListConnections_Call) Return(connections []gonetworkmanager.Connection, err error) *MockSettings_ListConnections_Call {
_c.Call.Return(connections, err)
func (_c *MockSettings_ListConnections_Call) Return(_a0 []gonetworkmanager.Connection, _a1 error) *MockSettings_ListConnections_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -383,20 +361,21 @@ func (_c *MockSettings_ListConnections_Call) RunAndReturn(run func() ([]gonetwor
return _c
}
// ReloadConnections provides a mock function for the type MockSettings
func (_mock *MockSettings) ReloadConnections() error {
ret := _mock.Called()
// ReloadConnections provides a mock function with no fields
func (_m *MockSettings) ReloadConnections() error {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for ReloadConnections")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func() error); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() error); ok {
r0 = rf()
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -417,8 +396,8 @@ func (_c *MockSettings_ReloadConnections_Call) Run(run func()) *MockSettings_Rel
return _c
}
func (_c *MockSettings_ReloadConnections_Call) Return(err error) *MockSettings_ReloadConnections_Call {
_c.Call.Return(err)
func (_c *MockSettings_ReloadConnections_Call) Return(_a0 error) *MockSettings_ReloadConnections_Call {
_c.Call.Return(_a0)
return _c
}
@@ -427,20 +406,21 @@ func (_c *MockSettings_ReloadConnections_Call) RunAndReturn(run func() error) *M
return _c
}
// SaveHostname provides a mock function for the type MockSettings
func (_mock *MockSettings) SaveHostname(hostname string) error {
ret := _mock.Called(hostname)
// SaveHostname provides a mock function with given fields: hostname
func (_m *MockSettings) SaveHostname(hostname string) error {
ret := _m.Called(hostname)
if len(ret) == 0 {
panic("no return value specified for SaveHostname")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string) error); ok {
r0 = returnFunc(hostname)
if rf, ok := ret.Get(0).(func(string) error); ok {
r0 = rf(hostname)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -451,29 +431,37 @@ type MockSettings_SaveHostname_Call struct {
// SaveHostname is a helper method to define mock.On call
// - hostname string
func (_e *MockSettings_Expecter) SaveHostname(hostname any) *MockSettings_SaveHostname_Call {
func (_e *MockSettings_Expecter) SaveHostname(hostname interface{}) *MockSettings_SaveHostname_Call {
return &MockSettings_SaveHostname_Call{Call: _e.mock.On("SaveHostname", hostname)}
}
func (_c *MockSettings_SaveHostname_Call) Run(run func(hostname string)) *MockSettings_SaveHostname_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockSettings_SaveHostname_Call) Return(err error) *MockSettings_SaveHostname_Call {
_c.Call.Return(err)
func (_c *MockSettings_SaveHostname_Call) Return(_a0 error) *MockSettings_SaveHostname_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockSettings_SaveHostname_Call) RunAndReturn(run func(hostname string) error) *MockSettings_SaveHostname_Call {
func (_c *MockSettings_SaveHostname_Call) RunAndReturn(run func(string) error) *MockSettings_SaveHostname_Call {
_c.Call.Return(run)
return _c
}
// NewMockSettings creates a new instance of MockSettings. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockSettings(t interface {
mock.TestingT
Cleanup(func())
}) *MockSettings {
mock := &MockSettings{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
@@ -1,30 +1,14 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package dbus
import (
"context"
context "context"
"github.com/godbus/dbus/v5"
dbus "github.com/godbus/dbus/v5"
mock "github.com/stretchr/testify/mock"
)
// NewMockBusObject creates a new instance of MockBusObject. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockBusObject(t interface {
mock.TestingT
Cleanup(func())
}) *MockBusObject {
mock := &MockBusObject{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockBusObject is an autogenerated mock type for the BusObject type
type MockBusObject struct {
mock.Mock
@@ -38,30 +22,30 @@ func (_m *MockBusObject) EXPECT() *MockBusObject_Expecter {
return &MockBusObject_Expecter{mock: &_m.Mock}
}
// AddMatchSignal provides a mock function for the type MockBusObject
func (_mock *MockBusObject) AddMatchSignal(iface string, member string, options ...dbus.MatchOption) *dbus.Call {
// dbus.MatchOption
_va := make([]any, len(options))
// AddMatchSignal provides a mock function with given fields: iface, member, options
func (_m *MockBusObject) AddMatchSignal(iface string, member string, options ...dbus.MatchOption) *dbus.Call {
_va := make([]interface{}, len(options))
for _i := range options {
_va[_i] = options[_i]
}
var _ca []any
var _ca []interface{}
_ca = append(_ca, iface, member)
_ca = append(_ca, _va...)
ret := _mock.Called(_ca...)
ret := _m.Called(_ca...)
if len(ret) == 0 {
panic("no return value specified for AddMatchSignal")
}
var r0 *dbus.Call
if returnFunc, ok := ret.Get(0).(func(string, string, ...dbus.MatchOption) *dbus.Call); ok {
r0 = returnFunc(iface, member, options...)
if rf, ok := ret.Get(0).(func(string, string, ...dbus.MatchOption) *dbus.Call); ok {
r0 = rf(iface, member, options...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*dbus.Call)
}
}
return r0
}
@@ -74,67 +58,54 @@ type MockBusObject_AddMatchSignal_Call struct {
// - iface string
// - member string
// - options ...dbus.MatchOption
func (_e *MockBusObject_Expecter) AddMatchSignal(iface any, member any, options ...any) *MockBusObject_AddMatchSignal_Call {
func (_e *MockBusObject_Expecter) AddMatchSignal(iface interface{}, member interface{}, options ...interface{}) *MockBusObject_AddMatchSignal_Call {
return &MockBusObject_AddMatchSignal_Call{Call: _e.mock.On("AddMatchSignal",
append([]any{iface, member}, options...)...)}
append([]interface{}{iface, member}, options...)...)}
}
func (_c *MockBusObject_AddMatchSignal_Call) Run(run func(iface string, member string, options ...dbus.MatchOption)) *MockBusObject_AddMatchSignal_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
var arg2 []dbus.MatchOption
variadicArgs := make([]dbus.MatchOption, len(args)-2)
for i, a := range args[2:] {
if a != nil {
variadicArgs[i] = a.(dbus.MatchOption)
}
}
arg2 = variadicArgs
run(
arg0,
arg1,
arg2...,
)
run(args[0].(string), args[1].(string), variadicArgs...)
})
return _c
}
func (_c *MockBusObject_AddMatchSignal_Call) Return(call *dbus.Call) *MockBusObject_AddMatchSignal_Call {
_c.Call.Return(call)
func (_c *MockBusObject_AddMatchSignal_Call) Return(_a0 *dbus.Call) *MockBusObject_AddMatchSignal_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockBusObject_AddMatchSignal_Call) RunAndReturn(run func(iface string, member string, options ...dbus.MatchOption) *dbus.Call) *MockBusObject_AddMatchSignal_Call {
func (_c *MockBusObject_AddMatchSignal_Call) RunAndReturn(run func(string, string, ...dbus.MatchOption) *dbus.Call) *MockBusObject_AddMatchSignal_Call {
_c.Call.Return(run)
return _c
}
// Call provides a mock function for the type MockBusObject
func (_mock *MockBusObject) Call(method string, flags dbus.Flags, args ...any) *dbus.Call {
var _ca []any
// Call provides a mock function with given fields: method, flags, args
func (_m *MockBusObject) Call(method string, flags dbus.Flags, args ...interface{}) *dbus.Call {
var _ca []interface{}
_ca = append(_ca, method, flags)
_ca = append(_ca, args...)
ret := _mock.Called(_ca...)
ret := _m.Called(_ca...)
if len(ret) == 0 {
panic("no return value specified for Call")
}
var r0 *dbus.Call
if returnFunc, ok := ret.Get(0).(func(string, dbus.Flags, ...any) *dbus.Call); ok {
r0 = returnFunc(method, flags, args...)
if rf, ok := ret.Get(0).(func(string, dbus.Flags, ...interface{}) *dbus.Call); ok {
r0 = rf(method, flags, args...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*dbus.Call)
}
}
return r0
}
@@ -146,68 +117,55 @@ type MockBusObject_Call_Call struct {
// Call is a helper method to define mock.On call
// - method string
// - flags dbus.Flags
// - args ...any
func (_e *MockBusObject_Expecter) Call(method any, flags any, args ...any) *MockBusObject_Call_Call {
// - args ...interface{}
func (_e *MockBusObject_Expecter) Call(method interface{}, flags interface{}, args ...interface{}) *MockBusObject_Call_Call {
return &MockBusObject_Call_Call{Call: _e.mock.On("Call",
append([]any{method, flags}, args...)...)}
append([]interface{}{method, flags}, args...)...)}
}
func (_c *MockBusObject_Call_Call) Run(run func(method string, flags dbus.Flags, args ...any)) *MockBusObject_Call_Call {
func (_c *MockBusObject_Call_Call) Run(run func(method string, flags dbus.Flags, args ...interface{})) *MockBusObject_Call_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 dbus.Flags
if args[1] != nil {
arg1 = args[1].(dbus.Flags)
}
var arg2 []any
variadicArgs := make([]any, len(args)-2)
variadicArgs := make([]interface{}, len(args)-2)
for i, a := range args[2:] {
if a != nil {
variadicArgs[i] = a.(any)
variadicArgs[i] = a.(interface{})
}
}
arg2 = variadicArgs
run(
arg0,
arg1,
arg2...,
)
run(args[0].(string), args[1].(dbus.Flags), variadicArgs...)
})
return _c
}
func (_c *MockBusObject_Call_Call) Return(call *dbus.Call) *MockBusObject_Call_Call {
_c.Call.Return(call)
func (_c *MockBusObject_Call_Call) Return(_a0 *dbus.Call) *MockBusObject_Call_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockBusObject_Call_Call) RunAndReturn(run func(method string, flags dbus.Flags, args ...any) *dbus.Call) *MockBusObject_Call_Call {
func (_c *MockBusObject_Call_Call) RunAndReturn(run func(string, dbus.Flags, ...interface{}) *dbus.Call) *MockBusObject_Call_Call {
_c.Call.Return(run)
return _c
}
// CallWithContext provides a mock function for the type MockBusObject
func (_mock *MockBusObject) CallWithContext(ctx context.Context, method string, flags dbus.Flags, args ...any) *dbus.Call {
var _ca []any
// CallWithContext provides a mock function with given fields: ctx, method, flags, args
func (_m *MockBusObject) CallWithContext(ctx context.Context, method string, flags dbus.Flags, args ...interface{}) *dbus.Call {
var _ca []interface{}
_ca = append(_ca, ctx, method, flags)
_ca = append(_ca, args...)
ret := _mock.Called(_ca...)
ret := _m.Called(_ca...)
if len(ret) == 0 {
panic("no return value specified for CallWithContext")
}
var r0 *dbus.Call
if returnFunc, ok := ret.Get(0).(func(context.Context, string, dbus.Flags, ...any) *dbus.Call); ok {
r0 = returnFunc(ctx, method, flags, args...)
if rf, ok := ret.Get(0).(func(context.Context, string, dbus.Flags, ...interface{}) *dbus.Call); ok {
r0 = rf(ctx, method, flags, args...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*dbus.Call)
}
}
return r0
}
@@ -220,68 +178,50 @@ type MockBusObject_CallWithContext_Call struct {
// - ctx context.Context
// - method string
// - flags dbus.Flags
// - args ...any
func (_e *MockBusObject_Expecter) CallWithContext(ctx any, method any, flags any, args ...any) *MockBusObject_CallWithContext_Call {
// - args ...interface{}
func (_e *MockBusObject_Expecter) CallWithContext(ctx interface{}, method interface{}, flags interface{}, args ...interface{}) *MockBusObject_CallWithContext_Call {
return &MockBusObject_CallWithContext_Call{Call: _e.mock.On("CallWithContext",
append([]any{ctx, method, flags}, args...)...)}
append([]interface{}{ctx, method, flags}, args...)...)}
}
func (_c *MockBusObject_CallWithContext_Call) Run(run func(ctx context.Context, method string, flags dbus.Flags, args ...any)) *MockBusObject_CallWithContext_Call {
func (_c *MockBusObject_CallWithContext_Call) Run(run func(ctx context.Context, method string, flags dbus.Flags, args ...interface{})) *MockBusObject_CallWithContext_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 context.Context
if args[0] != nil {
arg0 = args[0].(context.Context)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
var arg2 dbus.Flags
if args[2] != nil {
arg2 = args[2].(dbus.Flags)
}
var arg3 []any
variadicArgs := make([]any, len(args)-3)
variadicArgs := make([]interface{}, len(args)-3)
for i, a := range args[3:] {
if a != nil {
variadicArgs[i] = a.(any)
variadicArgs[i] = a.(interface{})
}
}
arg3 = variadicArgs
run(
arg0,
arg1,
arg2,
arg3...,
)
run(args[0].(context.Context), args[1].(string), args[2].(dbus.Flags), variadicArgs...)
})
return _c
}
func (_c *MockBusObject_CallWithContext_Call) Return(call *dbus.Call) *MockBusObject_CallWithContext_Call {
_c.Call.Return(call)
func (_c *MockBusObject_CallWithContext_Call) Return(_a0 *dbus.Call) *MockBusObject_CallWithContext_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockBusObject_CallWithContext_Call) RunAndReturn(run func(ctx context.Context, method string, flags dbus.Flags, args ...any) *dbus.Call) *MockBusObject_CallWithContext_Call {
func (_c *MockBusObject_CallWithContext_Call) RunAndReturn(run func(context.Context, string, dbus.Flags, ...interface{}) *dbus.Call) *MockBusObject_CallWithContext_Call {
_c.Call.Return(run)
return _c
}
// Destination provides a mock function for the type MockBusObject
func (_mock *MockBusObject) Destination() string {
ret := _mock.Called()
// Destination provides a mock function with no fields
func (_m *MockBusObject) Destination() string {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Destination")
}
var r0 string
if returnFunc, ok := ret.Get(0).(func() string); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() string); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(string)
}
return r0
}
@@ -302,8 +242,8 @@ func (_c *MockBusObject_Destination_Call) Run(run func()) *MockBusObject_Destina
return _c
}
func (_c *MockBusObject_Destination_Call) Return(s string) *MockBusObject_Destination_Call {
_c.Call.Return(s)
func (_c *MockBusObject_Destination_Call) Return(_a0 string) *MockBusObject_Destination_Call {
_c.Call.Return(_a0)
return _c
}
@@ -312,9 +252,9 @@ func (_c *MockBusObject_Destination_Call) RunAndReturn(run func() string) *MockB
return _c
}
// GetProperty provides a mock function for the type MockBusObject
func (_mock *MockBusObject) GetProperty(p string) (dbus.Variant, error) {
ret := _mock.Called(p)
// GetProperty provides a mock function with given fields: p
func (_m *MockBusObject) GetProperty(p string) (dbus.Variant, error) {
ret := _m.Called(p)
if len(ret) == 0 {
panic("no return value specified for GetProperty")
@@ -322,19 +262,21 @@ func (_mock *MockBusObject) GetProperty(p string) (dbus.Variant, error) {
var r0 dbus.Variant
var r1 error
if returnFunc, ok := ret.Get(0).(func(string) (dbus.Variant, error)); ok {
return returnFunc(p)
if rf, ok := ret.Get(0).(func(string) (dbus.Variant, error)); ok {
return rf(p)
}
if returnFunc, ok := ret.Get(0).(func(string) dbus.Variant); ok {
r0 = returnFunc(p)
if rf, ok := ret.Get(0).(func(string) dbus.Variant); ok {
r0 = rf(p)
} else {
r0 = ret.Get(0).(dbus.Variant)
}
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
r1 = returnFunc(p)
if rf, ok := ret.Get(1).(func(string) error); ok {
r1 = rf(p)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -345,52 +287,47 @@ type MockBusObject_GetProperty_Call struct {
// GetProperty is a helper method to define mock.On call
// - p string
func (_e *MockBusObject_Expecter) GetProperty(p any) *MockBusObject_GetProperty_Call {
func (_e *MockBusObject_Expecter) GetProperty(p interface{}) *MockBusObject_GetProperty_Call {
return &MockBusObject_GetProperty_Call{Call: _e.mock.On("GetProperty", p)}
}
func (_c *MockBusObject_GetProperty_Call) Run(run func(p string)) *MockBusObject_GetProperty_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockBusObject_GetProperty_Call) Return(variant dbus.Variant, err error) *MockBusObject_GetProperty_Call {
_c.Call.Return(variant, err)
func (_c *MockBusObject_GetProperty_Call) Return(_a0 dbus.Variant, _a1 error) *MockBusObject_GetProperty_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockBusObject_GetProperty_Call) RunAndReturn(run func(p string) (dbus.Variant, error)) *MockBusObject_GetProperty_Call {
func (_c *MockBusObject_GetProperty_Call) RunAndReturn(run func(string) (dbus.Variant, error)) *MockBusObject_GetProperty_Call {
_c.Call.Return(run)
return _c
}
// Go provides a mock function for the type MockBusObject
func (_mock *MockBusObject) Go(method string, flags dbus.Flags, ch chan *dbus.Call, args ...any) *dbus.Call {
var _ca []any
// Go provides a mock function with given fields: method, flags, ch, args
func (_m *MockBusObject) Go(method string, flags dbus.Flags, ch chan *dbus.Call, args ...interface{}) *dbus.Call {
var _ca []interface{}
_ca = append(_ca, method, flags, ch)
_ca = append(_ca, args...)
ret := _mock.Called(_ca...)
ret := _m.Called(_ca...)
if len(ret) == 0 {
panic("no return value specified for Go")
}
var r0 *dbus.Call
if returnFunc, ok := ret.Get(0).(func(string, dbus.Flags, chan *dbus.Call, ...any) *dbus.Call); ok {
r0 = returnFunc(method, flags, ch, args...)
if rf, ok := ret.Get(0).(func(string, dbus.Flags, chan *dbus.Call, ...interface{}) *dbus.Call); ok {
r0 = rf(method, flags, ch, args...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*dbus.Call)
}
}
return r0
}
@@ -403,73 +340,55 @@ type MockBusObject_Go_Call struct {
// - method string
// - flags dbus.Flags
// - ch chan *dbus.Call
// - args ...any
func (_e *MockBusObject_Expecter) Go(method any, flags any, ch any, args ...any) *MockBusObject_Go_Call {
// - args ...interface{}
func (_e *MockBusObject_Expecter) Go(method interface{}, flags interface{}, ch interface{}, args ...interface{}) *MockBusObject_Go_Call {
return &MockBusObject_Go_Call{Call: _e.mock.On("Go",
append([]any{method, flags, ch}, args...)...)}
append([]interface{}{method, flags, ch}, args...)...)}
}
func (_c *MockBusObject_Go_Call) Run(run func(method string, flags dbus.Flags, ch chan *dbus.Call, args ...any)) *MockBusObject_Go_Call {
func (_c *MockBusObject_Go_Call) Run(run func(method string, flags dbus.Flags, ch chan *dbus.Call, args ...interface{})) *MockBusObject_Go_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 dbus.Flags
if args[1] != nil {
arg1 = args[1].(dbus.Flags)
}
var arg2 chan *dbus.Call
if args[2] != nil {
arg2 = args[2].(chan *dbus.Call)
}
var arg3 []any
variadicArgs := make([]any, len(args)-3)
variadicArgs := make([]interface{}, len(args)-3)
for i, a := range args[3:] {
if a != nil {
variadicArgs[i] = a.(any)
variadicArgs[i] = a.(interface{})
}
}
arg3 = variadicArgs
run(
arg0,
arg1,
arg2,
arg3...,
)
run(args[0].(string), args[1].(dbus.Flags), args[2].(chan *dbus.Call), variadicArgs...)
})
return _c
}
func (_c *MockBusObject_Go_Call) Return(call *dbus.Call) *MockBusObject_Go_Call {
_c.Call.Return(call)
func (_c *MockBusObject_Go_Call) Return(_a0 *dbus.Call) *MockBusObject_Go_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockBusObject_Go_Call) RunAndReturn(run func(method string, flags dbus.Flags, ch chan *dbus.Call, args ...any) *dbus.Call) *MockBusObject_Go_Call {
func (_c *MockBusObject_Go_Call) RunAndReturn(run func(string, dbus.Flags, chan *dbus.Call, ...interface{}) *dbus.Call) *MockBusObject_Go_Call {
_c.Call.Return(run)
return _c
}
// GoWithContext provides a mock function for the type MockBusObject
func (_mock *MockBusObject) GoWithContext(ctx context.Context, method string, flags dbus.Flags, ch chan *dbus.Call, args ...any) *dbus.Call {
var _ca []any
// GoWithContext provides a mock function with given fields: ctx, method, flags, ch, args
func (_m *MockBusObject) GoWithContext(ctx context.Context, method string, flags dbus.Flags, ch chan *dbus.Call, args ...interface{}) *dbus.Call {
var _ca []interface{}
_ca = append(_ca, ctx, method, flags, ch)
_ca = append(_ca, args...)
ret := _mock.Called(_ca...)
ret := _m.Called(_ca...)
if len(ret) == 0 {
panic("no return value specified for GoWithContext")
}
var r0 *dbus.Call
if returnFunc, ok := ret.Get(0).(func(context.Context, string, dbus.Flags, chan *dbus.Call, ...any) *dbus.Call); ok {
r0 = returnFunc(ctx, method, flags, ch, args...)
if rf, ok := ret.Get(0).(func(context.Context, string, dbus.Flags, chan *dbus.Call, ...interface{}) *dbus.Call); ok {
r0 = rf(ctx, method, flags, ch, args...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*dbus.Call)
}
}
return r0
}
@@ -483,73 +402,50 @@ type MockBusObject_GoWithContext_Call struct {
// - method string
// - flags dbus.Flags
// - ch chan *dbus.Call
// - args ...any
func (_e *MockBusObject_Expecter) GoWithContext(ctx any, method any, flags any, ch any, args ...any) *MockBusObject_GoWithContext_Call {
// - args ...interface{}
func (_e *MockBusObject_Expecter) GoWithContext(ctx interface{}, method interface{}, flags interface{}, ch interface{}, args ...interface{}) *MockBusObject_GoWithContext_Call {
return &MockBusObject_GoWithContext_Call{Call: _e.mock.On("GoWithContext",
append([]any{ctx, method, flags, ch}, args...)...)}
append([]interface{}{ctx, method, flags, ch}, args...)...)}
}
func (_c *MockBusObject_GoWithContext_Call) Run(run func(ctx context.Context, method string, flags dbus.Flags, ch chan *dbus.Call, args ...any)) *MockBusObject_GoWithContext_Call {
func (_c *MockBusObject_GoWithContext_Call) Run(run func(ctx context.Context, method string, flags dbus.Flags, ch chan *dbus.Call, args ...interface{})) *MockBusObject_GoWithContext_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 context.Context
if args[0] != nil {
arg0 = args[0].(context.Context)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
var arg2 dbus.Flags
if args[2] != nil {
arg2 = args[2].(dbus.Flags)
}
var arg3 chan *dbus.Call
if args[3] != nil {
arg3 = args[3].(chan *dbus.Call)
}
var arg4 []any
variadicArgs := make([]any, len(args)-4)
variadicArgs := make([]interface{}, len(args)-4)
for i, a := range args[4:] {
if a != nil {
variadicArgs[i] = a.(any)
variadicArgs[i] = a.(interface{})
}
}
arg4 = variadicArgs
run(
arg0,
arg1,
arg2,
arg3,
arg4...,
)
run(args[0].(context.Context), args[1].(string), args[2].(dbus.Flags), args[3].(chan *dbus.Call), variadicArgs...)
})
return _c
}
func (_c *MockBusObject_GoWithContext_Call) Return(call *dbus.Call) *MockBusObject_GoWithContext_Call {
_c.Call.Return(call)
func (_c *MockBusObject_GoWithContext_Call) Return(_a0 *dbus.Call) *MockBusObject_GoWithContext_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockBusObject_GoWithContext_Call) RunAndReturn(run func(ctx context.Context, method string, flags dbus.Flags, ch chan *dbus.Call, args ...any) *dbus.Call) *MockBusObject_GoWithContext_Call {
func (_c *MockBusObject_GoWithContext_Call) RunAndReturn(run func(context.Context, string, dbus.Flags, chan *dbus.Call, ...interface{}) *dbus.Call) *MockBusObject_GoWithContext_Call {
_c.Call.Return(run)
return _c
}
// Path provides a mock function for the type MockBusObject
func (_mock *MockBusObject) Path() dbus.ObjectPath {
ret := _mock.Called()
// Path provides a mock function with no fields
func (_m *MockBusObject) Path() dbus.ObjectPath {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Path")
}
var r0 dbus.ObjectPath
if returnFunc, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() dbus.ObjectPath); ok {
r0 = rf()
} else {
r0 = ret.Get(0).(dbus.ObjectPath)
}
return r0
}
@@ -570,8 +466,8 @@ func (_c *MockBusObject_Path_Call) Run(run func()) *MockBusObject_Path_Call {
return _c
}
func (_c *MockBusObject_Path_Call) Return(objectPath dbus.ObjectPath) *MockBusObject_Path_Call {
_c.Call.Return(objectPath)
func (_c *MockBusObject_Path_Call) Return(_a0 dbus.ObjectPath) *MockBusObject_Path_Call {
_c.Call.Return(_a0)
return _c
}
@@ -580,30 +476,30 @@ func (_c *MockBusObject_Path_Call) RunAndReturn(run func() dbus.ObjectPath) *Moc
return _c
}
// RemoveMatchSignal provides a mock function for the type MockBusObject
func (_mock *MockBusObject) RemoveMatchSignal(iface string, member string, options ...dbus.MatchOption) *dbus.Call {
// dbus.MatchOption
_va := make([]any, len(options))
// RemoveMatchSignal provides a mock function with given fields: iface, member, options
func (_m *MockBusObject) RemoveMatchSignal(iface string, member string, options ...dbus.MatchOption) *dbus.Call {
_va := make([]interface{}, len(options))
for _i := range options {
_va[_i] = options[_i]
}
var _ca []any
var _ca []interface{}
_ca = append(_ca, iface, member)
_ca = append(_ca, _va...)
ret := _mock.Called(_ca...)
ret := _m.Called(_ca...)
if len(ret) == 0 {
panic("no return value specified for RemoveMatchSignal")
}
var r0 *dbus.Call
if returnFunc, ok := ret.Get(0).(func(string, string, ...dbus.MatchOption) *dbus.Call); ok {
r0 = returnFunc(iface, member, options...)
if rf, ok := ret.Get(0).(func(string, string, ...dbus.MatchOption) *dbus.Call); ok {
r0 = rf(iface, member, options...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*dbus.Call)
}
}
return r0
}
@@ -616,62 +512,49 @@ type MockBusObject_RemoveMatchSignal_Call struct {
// - iface string
// - member string
// - options ...dbus.MatchOption
func (_e *MockBusObject_Expecter) RemoveMatchSignal(iface any, member any, options ...any) *MockBusObject_RemoveMatchSignal_Call {
func (_e *MockBusObject_Expecter) RemoveMatchSignal(iface interface{}, member interface{}, options ...interface{}) *MockBusObject_RemoveMatchSignal_Call {
return &MockBusObject_RemoveMatchSignal_Call{Call: _e.mock.On("RemoveMatchSignal",
append([]any{iface, member}, options...)...)}
append([]interface{}{iface, member}, options...)...)}
}
func (_c *MockBusObject_RemoveMatchSignal_Call) Run(run func(iface string, member string, options ...dbus.MatchOption)) *MockBusObject_RemoveMatchSignal_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
var arg2 []dbus.MatchOption
variadicArgs := make([]dbus.MatchOption, len(args)-2)
for i, a := range args[2:] {
if a != nil {
variadicArgs[i] = a.(dbus.MatchOption)
}
}
arg2 = variadicArgs
run(
arg0,
arg1,
arg2...,
)
run(args[0].(string), args[1].(string), variadicArgs...)
})
return _c
}
func (_c *MockBusObject_RemoveMatchSignal_Call) Return(call *dbus.Call) *MockBusObject_RemoveMatchSignal_Call {
_c.Call.Return(call)
func (_c *MockBusObject_RemoveMatchSignal_Call) Return(_a0 *dbus.Call) *MockBusObject_RemoveMatchSignal_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockBusObject_RemoveMatchSignal_Call) RunAndReturn(run func(iface string, member string, options ...dbus.MatchOption) *dbus.Call) *MockBusObject_RemoveMatchSignal_Call {
func (_c *MockBusObject_RemoveMatchSignal_Call) RunAndReturn(run func(string, string, ...dbus.MatchOption) *dbus.Call) *MockBusObject_RemoveMatchSignal_Call {
_c.Call.Return(run)
return _c
}
// SetProperty provides a mock function for the type MockBusObject
func (_mock *MockBusObject) SetProperty(p string, v any) error {
ret := _mock.Called(p, v)
// SetProperty provides a mock function with given fields: p, v
func (_m *MockBusObject) SetProperty(p string, v interface{}) error {
ret := _m.Called(p, v)
if len(ret) == 0 {
panic("no return value specified for SetProperty")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string, any) error); ok {
r0 = returnFunc(p, v)
if rf, ok := ret.Get(0).(func(string, interface{}) error); ok {
r0 = rf(p, v)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -682,53 +565,43 @@ type MockBusObject_SetProperty_Call struct {
// SetProperty is a helper method to define mock.On call
// - p string
// - v any
func (_e *MockBusObject_Expecter) SetProperty(p any, v any) *MockBusObject_SetProperty_Call {
// - v interface{}
func (_e *MockBusObject_Expecter) SetProperty(p interface{}, v interface{}) *MockBusObject_SetProperty_Call {
return &MockBusObject_SetProperty_Call{Call: _e.mock.On("SetProperty", p, v)}
}
func (_c *MockBusObject_SetProperty_Call) Run(run func(p string, v any)) *MockBusObject_SetProperty_Call {
func (_c *MockBusObject_SetProperty_Call) Run(run func(p string, v interface{})) *MockBusObject_SetProperty_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 any
if args[1] != nil {
arg1 = args[1].(any)
}
run(
arg0,
arg1,
)
run(args[0].(string), args[1].(interface{}))
})
return _c
}
func (_c *MockBusObject_SetProperty_Call) Return(err error) *MockBusObject_SetProperty_Call {
_c.Call.Return(err)
func (_c *MockBusObject_SetProperty_Call) Return(_a0 error) *MockBusObject_SetProperty_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockBusObject_SetProperty_Call) RunAndReturn(run func(p string, v any) error) *MockBusObject_SetProperty_Call {
func (_c *MockBusObject_SetProperty_Call) RunAndReturn(run func(string, interface{}) error) *MockBusObject_SetProperty_Call {
_c.Call.Return(run)
return _c
}
// StoreProperty provides a mock function for the type MockBusObject
func (_mock *MockBusObject) StoreProperty(p string, value any) error {
ret := _mock.Called(p, value)
// StoreProperty provides a mock function with given fields: p, value
func (_m *MockBusObject) StoreProperty(p string, value interface{}) error {
ret := _m.Called(p, value)
if len(ret) == 0 {
panic("no return value specified for StoreProperty")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string, any) error); ok {
r0 = returnFunc(p, value)
if rf, ok := ret.Get(0).(func(string, interface{}) error); ok {
r0 = rf(p, value)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -739,35 +612,38 @@ type MockBusObject_StoreProperty_Call struct {
// StoreProperty is a helper method to define mock.On call
// - p string
// - value any
func (_e *MockBusObject_Expecter) StoreProperty(p any, value any) *MockBusObject_StoreProperty_Call {
// - value interface{}
func (_e *MockBusObject_Expecter) StoreProperty(p interface{}, value interface{}) *MockBusObject_StoreProperty_Call {
return &MockBusObject_StoreProperty_Call{Call: _e.mock.On("StoreProperty", p, value)}
}
func (_c *MockBusObject_StoreProperty_Call) Run(run func(p string, value any)) *MockBusObject_StoreProperty_Call {
func (_c *MockBusObject_StoreProperty_Call) Run(run func(p string, value interface{})) *MockBusObject_StoreProperty_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 any
if args[1] != nil {
arg1 = args[1].(any)
}
run(
arg0,
arg1,
)
run(args[0].(string), args[1].(interface{}))
})
return _c
}
func (_c *MockBusObject_StoreProperty_Call) Return(err error) *MockBusObject_StoreProperty_Call {
_c.Call.Return(err)
func (_c *MockBusObject_StoreProperty_Call) Return(_a0 error) *MockBusObject_StoreProperty_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockBusObject_StoreProperty_Call) RunAndReturn(run func(p string, value any) error) *MockBusObject_StoreProperty_Call {
func (_c *MockBusObject_StoreProperty_Call) RunAndReturn(run func(string, interface{}) error) *MockBusObject_StoreProperty_Call {
_c.Call.Return(run)
return _c
}
// NewMockBusObject creates a new instance of MockBusObject. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockBusObject(t interface {
mock.TestingT
Cleanup(func())
}) *MockBusObject {
mock := &MockBusObject{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
@@ -1,26 +1,8 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package plugins
import (
mock "github.com/stretchr/testify/mock"
)
// NewMockGitClient creates a new instance of MockGitClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockGitClient(t interface {
mock.TestingT
Cleanup(func())
}) *MockGitClient {
mock := &MockGitClient{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
import mock "github.com/stretchr/testify/mock"
// MockGitClient is an autogenerated mock type for the GitClient type
type MockGitClient struct {
@@ -35,9 +17,9 @@ func (_m *MockGitClient) EXPECT() *MockGitClient_Expecter {
return &MockGitClient_Expecter{mock: &_m.Mock}
}
// HasUpdates provides a mock function for the type MockGitClient
func (_mock *MockGitClient) HasUpdates(path string) (bool, error) {
ret := _mock.Called(path)
// HasUpdates provides a mock function with given fields: path
func (_m *MockGitClient) HasUpdates(path string) (bool, error) {
ret := _m.Called(path)
if len(ret) == 0 {
panic("no return value specified for HasUpdates")
@@ -45,19 +27,21 @@ func (_mock *MockGitClient) HasUpdates(path string) (bool, error) {
var r0 bool
var r1 error
if returnFunc, ok := ret.Get(0).(func(string) (bool, error)); ok {
return returnFunc(path)
if rf, ok := ret.Get(0).(func(string) (bool, error)); ok {
return rf(path)
}
if returnFunc, ok := ret.Get(0).(func(string) bool); ok {
r0 = returnFunc(path)
if rf, ok := ret.Get(0).(func(string) bool); ok {
r0 = rf(path)
} else {
r0 = ret.Get(0).(bool)
}
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
r1 = returnFunc(path)
if rf, ok := ret.Get(1).(func(string) error); ok {
r1 = rf(path)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -74,41 +58,36 @@ func (_e *MockGitClient_Expecter) HasUpdates(path any) *MockGitClient_HasUpdates
func (_c *MockGitClient_HasUpdates_Call) Run(run func(path string)) *MockGitClient_HasUpdates_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockGitClient_HasUpdates_Call) Return(b bool, err error) *MockGitClient_HasUpdates_Call {
_c.Call.Return(b, err)
func (_c *MockGitClient_HasUpdates_Call) Return(_a0 bool, _a1 error) *MockGitClient_HasUpdates_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockGitClient_HasUpdates_Call) RunAndReturn(run func(path string) (bool, error)) *MockGitClient_HasUpdates_Call {
func (_c *MockGitClient_HasUpdates_Call) RunAndReturn(run func(string) (bool, error)) *MockGitClient_HasUpdates_Call {
_c.Call.Return(run)
return _c
}
// PlainClone provides a mock function for the type MockGitClient
func (_mock *MockGitClient) PlainClone(path string, url string) error {
ret := _mock.Called(path, url)
// PlainClone provides a mock function with given fields: path, url
func (_m *MockGitClient) PlainClone(path string, url string) error {
ret := _m.Called(path, url)
if len(ret) == 0 {
panic("no return value specified for PlainClone")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string, string) error); ok {
r0 = returnFunc(path, url)
if rf, ok := ret.Get(0).(func(string, string) error); ok {
r0 = rf(path, url)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -126,46 +105,36 @@ func (_e *MockGitClient_Expecter) PlainClone(path any, url any) *MockGitClient_P
func (_c *MockGitClient_PlainClone_Call) Run(run func(path string, url string)) *MockGitClient_PlainClone_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
var arg1 string
if args[1] != nil {
arg1 = args[1].(string)
}
run(
arg0,
arg1,
)
run(args[0].(string), args[1].(string))
})
return _c
}
func (_c *MockGitClient_PlainClone_Call) Return(err error) *MockGitClient_PlainClone_Call {
_c.Call.Return(err)
func (_c *MockGitClient_PlainClone_Call) Return(_a0 error) *MockGitClient_PlainClone_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockGitClient_PlainClone_Call) RunAndReturn(run func(path string, url string) error) *MockGitClient_PlainClone_Call {
func (_c *MockGitClient_PlainClone_Call) RunAndReturn(run func(string, string) error) *MockGitClient_PlainClone_Call {
_c.Call.Return(run)
return _c
}
// Pull provides a mock function for the type MockGitClient
func (_mock *MockGitClient) Pull(path string) error {
ret := _mock.Called(path)
// Pull provides a mock function with given fields: path
func (_m *MockGitClient) Pull(path string) error {
ret := _m.Called(path)
if len(ret) == 0 {
panic("no return value specified for Pull")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(string) error); ok {
r0 = returnFunc(path)
if rf, ok := ret.Get(0).(func(string) error); ok {
r0 = rf(path)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -182,23 +151,31 @@ func (_e *MockGitClient_Expecter) Pull(path any) *MockGitClient_Pull_Call {
func (_c *MockGitClient_Pull_Call) Run(run func(path string)) *MockGitClient_Pull_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockGitClient_Pull_Call) Return(err error) *MockGitClient_Pull_Call {
_c.Call.Return(err)
func (_c *MockGitClient_Pull_Call) Return(_a0 error) *MockGitClient_Pull_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockGitClient_Pull_Call) RunAndReturn(run func(path string) error) *MockGitClient_Pull_Call {
func (_c *MockGitClient_Pull_Call) RunAndReturn(run func(string) error) *MockGitClient_Pull_Call {
_c.Call.Return(run)
return _c
}
// NewMockGitClient creates a new instance of MockGitClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockGitClient(t interface {
mock.TestingT
Cleanup(func())
}) *MockGitClient {
mock := &MockGitClient{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
+103 -124
View File
@@ -1,30 +1,15 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package net
import (
"net"
"time"
net "net"
mock "github.com/stretchr/testify/mock"
time "time"
)
// NewMockConn creates a new instance of MockConn. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockConn(t interface {
mock.TestingT
Cleanup(func())
}) *MockConn {
mock := &MockConn{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockConn is an autogenerated mock type for the Conn type
type MockConn struct {
mock.Mock
@@ -38,20 +23,21 @@ func (_m *MockConn) EXPECT() *MockConn_Expecter {
return &MockConn_Expecter{mock: &_m.Mock}
}
// Close provides a mock function for the type MockConn
func (_mock *MockConn) Close() error {
ret := _mock.Called()
// Close provides a mock function with no fields
func (_m *MockConn) Close() error {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Close")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func() error); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() error); ok {
r0 = rf()
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -72,8 +58,8 @@ func (_c *MockConn_Close_Call) Run(run func()) *MockConn_Close_Call {
return _c
}
func (_c *MockConn_Close_Call) Return(err error) *MockConn_Close_Call {
_c.Call.Return(err)
func (_c *MockConn_Close_Call) Return(_a0 error) *MockConn_Close_Call {
_c.Call.Return(_a0)
return _c
}
@@ -82,22 +68,23 @@ func (_c *MockConn_Close_Call) RunAndReturn(run func() error) *MockConn_Close_Ca
return _c
}
// LocalAddr provides a mock function for the type MockConn
func (_mock *MockConn) LocalAddr() net.Addr {
ret := _mock.Called()
// LocalAddr provides a mock function with no fields
func (_m *MockConn) LocalAddr() net.Addr {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for LocalAddr")
}
var r0 net.Addr
if returnFunc, ok := ret.Get(0).(func() net.Addr); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() net.Addr); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(net.Addr)
}
}
return r0
}
@@ -118,8 +105,8 @@ func (_c *MockConn_LocalAddr_Call) Run(run func()) *MockConn_LocalAddr_Call {
return _c
}
func (_c *MockConn_LocalAddr_Call) Return(addr net.Addr) *MockConn_LocalAddr_Call {
_c.Call.Return(addr)
func (_c *MockConn_LocalAddr_Call) Return(_a0 net.Addr) *MockConn_LocalAddr_Call {
_c.Call.Return(_a0)
return _c
}
@@ -128,9 +115,9 @@ func (_c *MockConn_LocalAddr_Call) RunAndReturn(run func() net.Addr) *MockConn_L
return _c
}
// Read provides a mock function for the type MockConn
func (_mock *MockConn) Read(b []byte) (int, error) {
ret := _mock.Called(b)
// Read provides a mock function with given fields: b
func (_m *MockConn) Read(b []byte) (int, error) {
ret := _m.Called(b)
if len(ret) == 0 {
panic("no return value specified for Read")
@@ -138,19 +125,21 @@ func (_mock *MockConn) Read(b []byte) (int, error) {
var r0 int
var r1 error
if returnFunc, ok := ret.Get(0).(func([]byte) (int, error)); ok {
return returnFunc(b)
if rf, ok := ret.Get(0).(func([]byte) (int, error)); ok {
return rf(b)
}
if returnFunc, ok := ret.Get(0).(func([]byte) int); ok {
r0 = returnFunc(b)
if rf, ok := ret.Get(0).(func([]byte) int); ok {
r0 = rf(b)
} else {
r0 = ret.Get(0).(int)
}
if returnFunc, ok := ret.Get(1).(func([]byte) error); ok {
r1 = returnFunc(b)
if rf, ok := ret.Get(1).(func([]byte) error); ok {
r1 = rf(b)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -161,19 +150,13 @@ type MockConn_Read_Call struct {
// Read is a helper method to define mock.On call
// - b []byte
func (_e *MockConn_Expecter) Read(b any) *MockConn_Read_Call {
func (_e *MockConn_Expecter) Read(b interface{}) *MockConn_Read_Call {
return &MockConn_Read_Call{Call: _e.mock.On("Read", b)}
}
func (_c *MockConn_Read_Call) Run(run func(b []byte)) *MockConn_Read_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 []byte
if args[0] != nil {
arg0 = args[0].([]byte)
}
run(
arg0,
)
run(args[0].([]byte))
})
return _c
}
@@ -183,27 +166,28 @@ func (_c *MockConn_Read_Call) Return(n int, err error) *MockConn_Read_Call {
return _c
}
func (_c *MockConn_Read_Call) RunAndReturn(run func(b []byte) (int, error)) *MockConn_Read_Call {
func (_c *MockConn_Read_Call) RunAndReturn(run func([]byte) (int, error)) *MockConn_Read_Call {
_c.Call.Return(run)
return _c
}
// RemoteAddr provides a mock function for the type MockConn
func (_mock *MockConn) RemoteAddr() net.Addr {
ret := _mock.Called()
// RemoteAddr provides a mock function with no fields
func (_m *MockConn) RemoteAddr() net.Addr {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for RemoteAddr")
}
var r0 net.Addr
if returnFunc, ok := ret.Get(0).(func() net.Addr); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() net.Addr); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(net.Addr)
}
}
return r0
}
@@ -224,8 +208,8 @@ func (_c *MockConn_RemoteAddr_Call) Run(run func()) *MockConn_RemoteAddr_Call {
return _c
}
func (_c *MockConn_RemoteAddr_Call) Return(addr net.Addr) *MockConn_RemoteAddr_Call {
_c.Call.Return(addr)
func (_c *MockConn_RemoteAddr_Call) Return(_a0 net.Addr) *MockConn_RemoteAddr_Call {
_c.Call.Return(_a0)
return _c
}
@@ -234,20 +218,21 @@ func (_c *MockConn_RemoteAddr_Call) RunAndReturn(run func() net.Addr) *MockConn_
return _c
}
// SetDeadline provides a mock function for the type MockConn
func (_mock *MockConn) SetDeadline(t time.Time) error {
ret := _mock.Called(t)
// SetDeadline provides a mock function with given fields: t
func (_m *MockConn) SetDeadline(t time.Time) error {
ret := _m.Called(t)
if len(ret) == 0 {
panic("no return value specified for SetDeadline")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(time.Time) error); ok {
r0 = returnFunc(t)
if rf, ok := ret.Get(0).(func(time.Time) error); ok {
r0 = rf(t)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -258,47 +243,42 @@ type MockConn_SetDeadline_Call struct {
// SetDeadline is a helper method to define mock.On call
// - t time.Time
func (_e *MockConn_Expecter) SetDeadline(t any) *MockConn_SetDeadline_Call {
func (_e *MockConn_Expecter) SetDeadline(t interface{}) *MockConn_SetDeadline_Call {
return &MockConn_SetDeadline_Call{Call: _e.mock.On("SetDeadline", t)}
}
func (_c *MockConn_SetDeadline_Call) Run(run func(t time.Time)) *MockConn_SetDeadline_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 time.Time
if args[0] != nil {
arg0 = args[0].(time.Time)
}
run(
arg0,
)
run(args[0].(time.Time))
})
return _c
}
func (_c *MockConn_SetDeadline_Call) Return(err error) *MockConn_SetDeadline_Call {
_c.Call.Return(err)
func (_c *MockConn_SetDeadline_Call) Return(_a0 error) *MockConn_SetDeadline_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockConn_SetDeadline_Call) RunAndReturn(run func(t time.Time) error) *MockConn_SetDeadline_Call {
func (_c *MockConn_SetDeadline_Call) RunAndReturn(run func(time.Time) error) *MockConn_SetDeadline_Call {
_c.Call.Return(run)
return _c
}
// SetReadDeadline provides a mock function for the type MockConn
func (_mock *MockConn) SetReadDeadline(t time.Time) error {
ret := _mock.Called(t)
// SetReadDeadline provides a mock function with given fields: t
func (_m *MockConn) SetReadDeadline(t time.Time) error {
ret := _m.Called(t)
if len(ret) == 0 {
panic("no return value specified for SetReadDeadline")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(time.Time) error); ok {
r0 = returnFunc(t)
if rf, ok := ret.Get(0).(func(time.Time) error); ok {
r0 = rf(t)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -309,47 +289,42 @@ type MockConn_SetReadDeadline_Call struct {
// SetReadDeadline is a helper method to define mock.On call
// - t time.Time
func (_e *MockConn_Expecter) SetReadDeadline(t any) *MockConn_SetReadDeadline_Call {
func (_e *MockConn_Expecter) SetReadDeadline(t interface{}) *MockConn_SetReadDeadline_Call {
return &MockConn_SetReadDeadline_Call{Call: _e.mock.On("SetReadDeadline", t)}
}
func (_c *MockConn_SetReadDeadline_Call) Run(run func(t time.Time)) *MockConn_SetReadDeadline_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 time.Time
if args[0] != nil {
arg0 = args[0].(time.Time)
}
run(
arg0,
)
run(args[0].(time.Time))
})
return _c
}
func (_c *MockConn_SetReadDeadline_Call) Return(err error) *MockConn_SetReadDeadline_Call {
_c.Call.Return(err)
func (_c *MockConn_SetReadDeadline_Call) Return(_a0 error) *MockConn_SetReadDeadline_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockConn_SetReadDeadline_Call) RunAndReturn(run func(t time.Time) error) *MockConn_SetReadDeadline_Call {
func (_c *MockConn_SetReadDeadline_Call) RunAndReturn(run func(time.Time) error) *MockConn_SetReadDeadline_Call {
_c.Call.Return(run)
return _c
}
// SetWriteDeadline provides a mock function for the type MockConn
func (_mock *MockConn) SetWriteDeadline(t time.Time) error {
ret := _mock.Called(t)
// SetWriteDeadline provides a mock function with given fields: t
func (_m *MockConn) SetWriteDeadline(t time.Time) error {
ret := _m.Called(t)
if len(ret) == 0 {
panic("no return value specified for SetWriteDeadline")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func(time.Time) error); ok {
r0 = returnFunc(t)
if rf, ok := ret.Get(0).(func(time.Time) error); ok {
r0 = rf(t)
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -360,36 +335,30 @@ type MockConn_SetWriteDeadline_Call struct {
// SetWriteDeadline is a helper method to define mock.On call
// - t time.Time
func (_e *MockConn_Expecter) SetWriteDeadline(t any) *MockConn_SetWriteDeadline_Call {
func (_e *MockConn_Expecter) SetWriteDeadline(t interface{}) *MockConn_SetWriteDeadline_Call {
return &MockConn_SetWriteDeadline_Call{Call: _e.mock.On("SetWriteDeadline", t)}
}
func (_c *MockConn_SetWriteDeadline_Call) Run(run func(t time.Time)) *MockConn_SetWriteDeadline_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 time.Time
if args[0] != nil {
arg0 = args[0].(time.Time)
}
run(
arg0,
)
run(args[0].(time.Time))
})
return _c
}
func (_c *MockConn_SetWriteDeadline_Call) Return(err error) *MockConn_SetWriteDeadline_Call {
_c.Call.Return(err)
func (_c *MockConn_SetWriteDeadline_Call) Return(_a0 error) *MockConn_SetWriteDeadline_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockConn_SetWriteDeadline_Call) RunAndReturn(run func(t time.Time) error) *MockConn_SetWriteDeadline_Call {
func (_c *MockConn_SetWriteDeadline_Call) RunAndReturn(run func(time.Time) error) *MockConn_SetWriteDeadline_Call {
_c.Call.Return(run)
return _c
}
// Write provides a mock function for the type MockConn
func (_mock *MockConn) Write(b []byte) (int, error) {
ret := _mock.Called(b)
// Write provides a mock function with given fields: b
func (_m *MockConn) Write(b []byte) (int, error) {
ret := _m.Called(b)
if len(ret) == 0 {
panic("no return value specified for Write")
@@ -397,19 +366,21 @@ func (_mock *MockConn) Write(b []byte) (int, error) {
var r0 int
var r1 error
if returnFunc, ok := ret.Get(0).(func([]byte) (int, error)); ok {
return returnFunc(b)
if rf, ok := ret.Get(0).(func([]byte) (int, error)); ok {
return rf(b)
}
if returnFunc, ok := ret.Get(0).(func([]byte) int); ok {
r0 = returnFunc(b)
if rf, ok := ret.Get(0).(func([]byte) int); ok {
r0 = rf(b)
} else {
r0 = ret.Get(0).(int)
}
if returnFunc, ok := ret.Get(1).(func([]byte) error); ok {
r1 = returnFunc(b)
if rf, ok := ret.Get(1).(func([]byte) error); ok {
r1 = rf(b)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -420,19 +391,13 @@ type MockConn_Write_Call struct {
// Write is a helper method to define mock.On call
// - b []byte
func (_e *MockConn_Expecter) Write(b any) *MockConn_Write_Call {
func (_e *MockConn_Expecter) Write(b interface{}) *MockConn_Write_Call {
return &MockConn_Write_Call{Call: _e.mock.On("Write", b)}
}
func (_c *MockConn_Write_Call) Run(run func(b []byte)) *MockConn_Write_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 []byte
if args[0] != nil {
arg0 = args[0].([]byte)
}
run(
arg0,
)
run(args[0].([]byte))
})
return _c
}
@@ -442,7 +407,21 @@ func (_c *MockConn_Write_Call) Return(n int, err error) *MockConn_Write_Call {
return _c
}
func (_c *MockConn_Write_Call) RunAndReturn(run func(b []byte) (int, error)) *MockConn_Write_Call {
func (_c *MockConn_Write_Call) RunAndReturn(run func([]byte) (int, error)) *MockConn_Write_Call {
_c.Call.Return(run)
return _c
}
// NewMockConn creates a new instance of MockConn. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockConn(t interface {
mock.TestingT
Cleanup(func())
}) *MockConn {
mock := &MockConn{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
File diff suppressed because it is too large Load Diff
+66 -88
View File
@@ -1,26 +1,8 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package mocks_utils
import (
mock "github.com/stretchr/testify/mock"
)
// NewMockAppChecker creates a new instance of MockAppChecker. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockAppChecker(t interface {
mock.TestingT
Cleanup(func())
}) *MockAppChecker {
mock := &MockAppChecker{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
import mock "github.com/stretchr/testify/mock"
// MockAppChecker is an autogenerated mock type for the AppChecker type
type MockAppChecker struct {
@@ -35,27 +17,27 @@ func (_m *MockAppChecker) EXPECT() *MockAppChecker_Expecter {
return &MockAppChecker_Expecter{mock: &_m.Mock}
}
// AnyCommandExists provides a mock function for the type MockAppChecker
func (_mock *MockAppChecker) AnyCommandExists(cmds ...string) bool {
// string
_va := make([]any, len(cmds))
// AnyCommandExists provides a mock function with given fields: cmds
func (_m *MockAppChecker) AnyCommandExists(cmds ...string) bool {
_va := make([]interface{}, len(cmds))
for _i := range cmds {
_va[_i] = cmds[_i]
}
var _ca []any
var _ca []interface{}
_ca = append(_ca, _va...)
ret := _mock.Called(_ca...)
ret := _m.Called(_ca...)
if len(ret) == 0 {
panic("no return value specified for AnyCommandExists")
}
var r0 bool
if returnFunc, ok := ret.Get(0).(func(...string) bool); ok {
r0 = returnFunc(cmds...)
if rf, ok := ret.Get(0).(func(...string) bool); ok {
r0 = rf(cmds...)
} else {
r0 = ret.Get(0).(bool)
}
return r0
}
@@ -66,59 +48,55 @@ type MockAppChecker_AnyCommandExists_Call struct {
// AnyCommandExists is a helper method to define mock.On call
// - cmds ...string
func (_e *MockAppChecker_Expecter) AnyCommandExists(cmds ...any) *MockAppChecker_AnyCommandExists_Call {
func (_e *MockAppChecker_Expecter) AnyCommandExists(cmds ...interface{}) *MockAppChecker_AnyCommandExists_Call {
return &MockAppChecker_AnyCommandExists_Call{Call: _e.mock.On("AnyCommandExists",
append([]any{}, cmds...)...)}
append([]interface{}{}, cmds...)...)}
}
func (_c *MockAppChecker_AnyCommandExists_Call) Run(run func(cmds ...string)) *MockAppChecker_AnyCommandExists_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 []string
variadicArgs := make([]string, len(args)-0)
for i, a := range args[0:] {
if a != nil {
variadicArgs[i] = a.(string)
}
}
arg0 = variadicArgs
run(
arg0...,
)
run(variadicArgs...)
})
return _c
}
func (_c *MockAppChecker_AnyCommandExists_Call) Return(b bool) *MockAppChecker_AnyCommandExists_Call {
_c.Call.Return(b)
func (_c *MockAppChecker_AnyCommandExists_Call) Return(_a0 bool) *MockAppChecker_AnyCommandExists_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockAppChecker_AnyCommandExists_Call) RunAndReturn(run func(cmds ...string) bool) *MockAppChecker_AnyCommandExists_Call {
func (_c *MockAppChecker_AnyCommandExists_Call) RunAndReturn(run func(...string) bool) *MockAppChecker_AnyCommandExists_Call {
_c.Call.Return(run)
return _c
}
// AnyFlatpakExists provides a mock function for the type MockAppChecker
func (_mock *MockAppChecker) AnyFlatpakExists(flatpaks ...string) bool {
// string
_va := make([]any, len(flatpaks))
// AnyFlatpakExists provides a mock function with given fields: flatpaks
func (_m *MockAppChecker) AnyFlatpakExists(flatpaks ...string) bool {
_va := make([]interface{}, len(flatpaks))
for _i := range flatpaks {
_va[_i] = flatpaks[_i]
}
var _ca []any
var _ca []interface{}
_ca = append(_ca, _va...)
ret := _mock.Called(_ca...)
ret := _m.Called(_ca...)
if len(ret) == 0 {
panic("no return value specified for AnyFlatpakExists")
}
var r0 bool
if returnFunc, ok := ret.Get(0).(func(...string) bool); ok {
r0 = returnFunc(flatpaks...)
if rf, ok := ret.Get(0).(func(...string) bool); ok {
r0 = rf(flatpaks...)
} else {
r0 = ret.Get(0).(bool)
}
return r0
}
@@ -129,52 +107,49 @@ type MockAppChecker_AnyFlatpakExists_Call struct {
// AnyFlatpakExists is a helper method to define mock.On call
// - flatpaks ...string
func (_e *MockAppChecker_Expecter) AnyFlatpakExists(flatpaks ...any) *MockAppChecker_AnyFlatpakExists_Call {
func (_e *MockAppChecker_Expecter) AnyFlatpakExists(flatpaks ...interface{}) *MockAppChecker_AnyFlatpakExists_Call {
return &MockAppChecker_AnyFlatpakExists_Call{Call: _e.mock.On("AnyFlatpakExists",
append([]any{}, flatpaks...)...)}
append([]interface{}{}, flatpaks...)...)}
}
func (_c *MockAppChecker_AnyFlatpakExists_Call) Run(run func(flatpaks ...string)) *MockAppChecker_AnyFlatpakExists_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 []string
variadicArgs := make([]string, len(args)-0)
for i, a := range args[0:] {
if a != nil {
variadicArgs[i] = a.(string)
}
}
arg0 = variadicArgs
run(
arg0...,
)
run(variadicArgs...)
})
return _c
}
func (_c *MockAppChecker_AnyFlatpakExists_Call) Return(b bool) *MockAppChecker_AnyFlatpakExists_Call {
_c.Call.Return(b)
func (_c *MockAppChecker_AnyFlatpakExists_Call) Return(_a0 bool) *MockAppChecker_AnyFlatpakExists_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockAppChecker_AnyFlatpakExists_Call) RunAndReturn(run func(flatpaks ...string) bool) *MockAppChecker_AnyFlatpakExists_Call {
func (_c *MockAppChecker_AnyFlatpakExists_Call) RunAndReturn(run func(...string) bool) *MockAppChecker_AnyFlatpakExists_Call {
_c.Call.Return(run)
return _c
}
// CommandExists provides a mock function for the type MockAppChecker
func (_mock *MockAppChecker) CommandExists(cmd string) bool {
ret := _mock.Called(cmd)
// CommandExists provides a mock function with given fields: cmd
func (_m *MockAppChecker) CommandExists(cmd string) bool {
ret := _m.Called(cmd)
if len(ret) == 0 {
panic("no return value specified for CommandExists")
}
var r0 bool
if returnFunc, ok := ret.Get(0).(func(string) bool); ok {
r0 = returnFunc(cmd)
if rf, ok := ret.Get(0).(func(string) bool); ok {
r0 = rf(cmd)
} else {
r0 = ret.Get(0).(bool)
}
return r0
}
@@ -185,47 +160,42 @@ type MockAppChecker_CommandExists_Call struct {
// CommandExists is a helper method to define mock.On call
// - cmd string
func (_e *MockAppChecker_Expecter) CommandExists(cmd any) *MockAppChecker_CommandExists_Call {
func (_e *MockAppChecker_Expecter) CommandExists(cmd interface{}) *MockAppChecker_CommandExists_Call {
return &MockAppChecker_CommandExists_Call{Call: _e.mock.On("CommandExists", cmd)}
}
func (_c *MockAppChecker_CommandExists_Call) Run(run func(cmd string)) *MockAppChecker_CommandExists_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockAppChecker_CommandExists_Call) Return(b bool) *MockAppChecker_CommandExists_Call {
_c.Call.Return(b)
func (_c *MockAppChecker_CommandExists_Call) Return(_a0 bool) *MockAppChecker_CommandExists_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockAppChecker_CommandExists_Call) RunAndReturn(run func(cmd string) bool) *MockAppChecker_CommandExists_Call {
func (_c *MockAppChecker_CommandExists_Call) RunAndReturn(run func(string) bool) *MockAppChecker_CommandExists_Call {
_c.Call.Return(run)
return _c
}
// FlatpakExists provides a mock function for the type MockAppChecker
func (_mock *MockAppChecker) FlatpakExists(name string) bool {
ret := _mock.Called(name)
// FlatpakExists provides a mock function with given fields: name
func (_m *MockAppChecker) FlatpakExists(name string) bool {
ret := _m.Called(name)
if len(ret) == 0 {
panic("no return value specified for FlatpakExists")
}
var r0 bool
if returnFunc, ok := ret.Get(0).(func(string) bool); ok {
r0 = returnFunc(name)
if rf, ok := ret.Get(0).(func(string) bool); ok {
r0 = rf(name)
} else {
r0 = ret.Get(0).(bool)
}
return r0
}
@@ -236,29 +206,37 @@ type MockAppChecker_FlatpakExists_Call struct {
// FlatpakExists is a helper method to define mock.On call
// - name string
func (_e *MockAppChecker_Expecter) FlatpakExists(name any) *MockAppChecker_FlatpakExists_Call {
func (_e *MockAppChecker_Expecter) FlatpakExists(name interface{}) *MockAppChecker_FlatpakExists_Call {
return &MockAppChecker_FlatpakExists_Call{Call: _e.mock.On("FlatpakExists", name)}
}
func (_c *MockAppChecker_FlatpakExists_Call) Run(run func(name string)) *MockAppChecker_FlatpakExists_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockAppChecker_FlatpakExists_Call) Return(b bool) *MockAppChecker_FlatpakExists_Call {
_c.Call.Return(b)
func (_c *MockAppChecker_FlatpakExists_Call) Return(_a0 bool) *MockAppChecker_FlatpakExists_Call {
_c.Call.Return(_a0)
return _c
}
func (_c *MockAppChecker_FlatpakExists_Call) RunAndReturn(run func(name string) bool) *MockAppChecker_FlatpakExists_Call {
func (_c *MockAppChecker_FlatpakExists_Call) RunAndReturn(run func(string) bool) *MockAppChecker_FlatpakExists_Call {
_c.Call.Return(run)
return _c
}
// NewMockAppChecker creates a new instance of MockAppChecker. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockAppChecker(t interface {
mock.TestingT
Cleanup(func())
}) *MockAppChecker {
mock := &MockAppChecker{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
@@ -1,26 +1,8 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package mocks_version
import (
mock "github.com/stretchr/testify/mock"
)
// NewMockVersionFetcher creates a new instance of MockVersionFetcher. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockVersionFetcher(t interface {
mock.TestingT
Cleanup(func())
}) *MockVersionFetcher {
mock := &MockVersionFetcher{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
import mock "github.com/stretchr/testify/mock"
// MockVersionFetcher is an autogenerated mock type for the VersionFetcher type
type MockVersionFetcher struct {
@@ -35,9 +17,9 @@ func (_m *MockVersionFetcher) EXPECT() *MockVersionFetcher_Expecter {
return &MockVersionFetcher_Expecter{mock: &_m.Mock}
}
// GetCurrentVersion provides a mock function for the type MockVersionFetcher
func (_mock *MockVersionFetcher) GetCurrentVersion(dmsPath string) (string, error) {
ret := _mock.Called(dmsPath)
// GetCurrentVersion provides a mock function with given fields: dmsPath
func (_m *MockVersionFetcher) GetCurrentVersion(dmsPath string) (string, error) {
ret := _m.Called(dmsPath)
if len(ret) == 0 {
panic("no return value specified for GetCurrentVersion")
@@ -45,19 +27,21 @@ func (_mock *MockVersionFetcher) GetCurrentVersion(dmsPath string) (string, erro
var r0 string
var r1 error
if returnFunc, ok := ret.Get(0).(func(string) (string, error)); ok {
return returnFunc(dmsPath)
if rf, ok := ret.Get(0).(func(string) (string, error)); ok {
return rf(dmsPath)
}
if returnFunc, ok := ret.Get(0).(func(string) string); ok {
r0 = returnFunc(dmsPath)
if rf, ok := ret.Get(0).(func(string) string); ok {
r0 = rf(dmsPath)
} else {
r0 = ret.Get(0).(string)
}
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
r1 = returnFunc(dmsPath)
if rf, ok := ret.Get(1).(func(string) error); ok {
r1 = rf(dmsPath)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -68,36 +52,30 @@ type MockVersionFetcher_GetCurrentVersion_Call struct {
// GetCurrentVersion is a helper method to define mock.On call
// - dmsPath string
func (_e *MockVersionFetcher_Expecter) GetCurrentVersion(dmsPath any) *MockVersionFetcher_GetCurrentVersion_Call {
func (_e *MockVersionFetcher_Expecter) GetCurrentVersion(dmsPath interface{}) *MockVersionFetcher_GetCurrentVersion_Call {
return &MockVersionFetcher_GetCurrentVersion_Call{Call: _e.mock.On("GetCurrentVersion", dmsPath)}
}
func (_c *MockVersionFetcher_GetCurrentVersion_Call) Run(run func(dmsPath string)) *MockVersionFetcher_GetCurrentVersion_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockVersionFetcher_GetCurrentVersion_Call) Return(s string, err error) *MockVersionFetcher_GetCurrentVersion_Call {
_c.Call.Return(s, err)
func (_c *MockVersionFetcher_GetCurrentVersion_Call) Return(_a0 string, _a1 error) *MockVersionFetcher_GetCurrentVersion_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockVersionFetcher_GetCurrentVersion_Call) RunAndReturn(run func(dmsPath string) (string, error)) *MockVersionFetcher_GetCurrentVersion_Call {
func (_c *MockVersionFetcher_GetCurrentVersion_Call) RunAndReturn(run func(string) (string, error)) *MockVersionFetcher_GetCurrentVersion_Call {
_c.Call.Return(run)
return _c
}
// GetLatestVersion provides a mock function for the type MockVersionFetcher
func (_mock *MockVersionFetcher) GetLatestVersion(dmsPath string) (string, error) {
ret := _mock.Called(dmsPath)
// GetLatestVersion provides a mock function with given fields: dmsPath
func (_m *MockVersionFetcher) GetLatestVersion(dmsPath string) (string, error) {
ret := _m.Called(dmsPath)
if len(ret) == 0 {
panic("no return value specified for GetLatestVersion")
@@ -105,19 +83,21 @@ func (_mock *MockVersionFetcher) GetLatestVersion(dmsPath string) (string, error
var r0 string
var r1 error
if returnFunc, ok := ret.Get(0).(func(string) (string, error)); ok {
return returnFunc(dmsPath)
if rf, ok := ret.Get(0).(func(string) (string, error)); ok {
return rf(dmsPath)
}
if returnFunc, ok := ret.Get(0).(func(string) string); ok {
r0 = returnFunc(dmsPath)
if rf, ok := ret.Get(0).(func(string) string); ok {
r0 = rf(dmsPath)
} else {
r0 = ret.Get(0).(string)
}
if returnFunc, ok := ret.Get(1).(func(string) error); ok {
r1 = returnFunc(dmsPath)
if rf, ok := ret.Get(1).(func(string) error); ok {
r1 = rf(dmsPath)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -128,29 +108,37 @@ type MockVersionFetcher_GetLatestVersion_Call struct {
// GetLatestVersion is a helper method to define mock.On call
// - dmsPath string
func (_e *MockVersionFetcher_Expecter) GetLatestVersion(dmsPath any) *MockVersionFetcher_GetLatestVersion_Call {
func (_e *MockVersionFetcher_Expecter) GetLatestVersion(dmsPath interface{}) *MockVersionFetcher_GetLatestVersion_Call {
return &MockVersionFetcher_GetLatestVersion_Call{Call: _e.mock.On("GetLatestVersion", dmsPath)}
}
func (_c *MockVersionFetcher_GetLatestVersion_Call) Run(run func(dmsPath string)) *MockVersionFetcher_GetLatestVersion_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 string
if args[0] != nil {
arg0 = args[0].(string)
}
run(
arg0,
)
run(args[0].(string))
})
return _c
}
func (_c *MockVersionFetcher_GetLatestVersion_Call) Return(s string, err error) *MockVersionFetcher_GetLatestVersion_Call {
_c.Call.Return(s, err)
func (_c *MockVersionFetcher_GetLatestVersion_Call) Return(_a0 string, _a1 error) *MockVersionFetcher_GetLatestVersion_Call {
_c.Call.Return(_a0, _a1)
return _c
}
func (_c *MockVersionFetcher_GetLatestVersion_Call) RunAndReturn(run func(dmsPath string) (string, error)) *MockVersionFetcher_GetLatestVersion_Call {
func (_c *MockVersionFetcher_GetLatestVersion_Call) RunAndReturn(run func(string) (string, error)) *MockVersionFetcher_GetLatestVersion_Call {
_c.Call.Return(run)
return _c
}
// NewMockVersionFetcher creates a new instance of MockVersionFetcher. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockVersionFetcher(t interface {
mock.TestingT
Cleanup(func())
}) *MockVersionFetcher {
mock := &MockVersionFetcher{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
@@ -1,28 +1,12 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package mocks_wlclient
import (
"github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
client "github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
mock "github.com/stretchr/testify/mock"
)
// NewMockWaylandDisplay creates a new instance of MockWaylandDisplay. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockWaylandDisplay(t interface {
mock.TestingT
Cleanup(func())
}) *MockWaylandDisplay {
mock := &MockWaylandDisplay{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockWaylandDisplay is an autogenerated mock type for the WaylandDisplay type
type MockWaylandDisplay struct {
mock.Mock
@@ -36,22 +20,23 @@ func (_m *MockWaylandDisplay) EXPECT() *MockWaylandDisplay_Expecter {
return &MockWaylandDisplay_Expecter{mock: &_m.Mock}
}
// Context provides a mock function for the type MockWaylandDisplay
func (_mock *MockWaylandDisplay) Context() *client.Context {
ret := _mock.Called()
// Context provides a mock function with no fields
func (_m *MockWaylandDisplay) Context() *client.Context {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Context")
}
var r0 *client.Context
if returnFunc, ok := ret.Get(0).(func() *client.Context); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() *client.Context); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*client.Context)
}
}
return r0
}
@@ -72,8 +57,8 @@ func (_c *MockWaylandDisplay_Context_Call) Run(run func()) *MockWaylandDisplay_C
return _c
}
func (_c *MockWaylandDisplay_Context_Call) Return(context *client.Context) *MockWaylandDisplay_Context_Call {
_c.Call.Return(context)
func (_c *MockWaylandDisplay_Context_Call) Return(_a0 *client.Context) *MockWaylandDisplay_Context_Call {
_c.Call.Return(_a0)
return _c
}
@@ -82,20 +67,21 @@ func (_c *MockWaylandDisplay_Context_Call) RunAndReturn(run func() *client.Conte
return _c
}
// Destroy provides a mock function for the type MockWaylandDisplay
func (_mock *MockWaylandDisplay) Destroy() error {
ret := _mock.Called()
// Destroy provides a mock function with no fields
func (_m *MockWaylandDisplay) Destroy() error {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Destroy")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func() error); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() error); ok {
r0 = rf()
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -116,8 +102,8 @@ func (_c *MockWaylandDisplay_Destroy_Call) Run(run func()) *MockWaylandDisplay_D
return _c
}
func (_c *MockWaylandDisplay_Destroy_Call) Return(err error) *MockWaylandDisplay_Destroy_Call {
_c.Call.Return(err)
func (_c *MockWaylandDisplay_Destroy_Call) Return(_a0 error) *MockWaylandDisplay_Destroy_Call {
_c.Call.Return(_a0)
return _c
}
@@ -126,9 +112,9 @@ func (_c *MockWaylandDisplay_Destroy_Call) RunAndReturn(run func() error) *MockW
return _c
}
// GetRegistry provides a mock function for the type MockWaylandDisplay
func (_mock *MockWaylandDisplay) GetRegistry() (*client.Registry, error) {
ret := _mock.Called()
// GetRegistry provides a mock function with no fields
func (_m *MockWaylandDisplay) GetRegistry() (*client.Registry, error) {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for GetRegistry")
@@ -136,21 +122,23 @@ func (_mock *MockWaylandDisplay) GetRegistry() (*client.Registry, error) {
var r0 *client.Registry
var r1 error
if returnFunc, ok := ret.Get(0).(func() (*client.Registry, error)); ok {
return returnFunc()
if rf, ok := ret.Get(0).(func() (*client.Registry, error)); ok {
return rf()
}
if returnFunc, ok := ret.Get(0).(func() *client.Registry); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() *client.Registry); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*client.Registry)
}
}
if returnFunc, ok := ret.Get(1).(func() error); ok {
r1 = returnFunc()
if rf, ok := ret.Get(1).(func() error); ok {
r1 = rf()
} else {
r1 = ret.Error(1)
}
return r0, r1
}
@@ -171,8 +159,8 @@ func (_c *MockWaylandDisplay_GetRegistry_Call) Run(run func()) *MockWaylandDispl
return _c
}
func (_c *MockWaylandDisplay_GetRegistry_Call) Return(registry *client.Registry, err error) *MockWaylandDisplay_GetRegistry_Call {
_c.Call.Return(registry, err)
func (_c *MockWaylandDisplay_GetRegistry_Call) Return(_a0 *client.Registry, _a1 error) *MockWaylandDisplay_GetRegistry_Call {
_c.Call.Return(_a0, _a1)
return _c
}
@@ -181,20 +169,21 @@ func (_c *MockWaylandDisplay_GetRegistry_Call) RunAndReturn(run func() (*client.
return _c
}
// Roundtrip provides a mock function for the type MockWaylandDisplay
func (_mock *MockWaylandDisplay) Roundtrip() error {
ret := _mock.Called()
// Roundtrip provides a mock function with no fields
func (_m *MockWaylandDisplay) Roundtrip() error {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Roundtrip")
}
var r0 error
if returnFunc, ok := ret.Get(0).(func() error); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() error); ok {
r0 = rf()
} else {
r0 = ret.Error(0)
}
return r0
}
@@ -215,8 +204,8 @@ func (_c *MockWaylandDisplay_Roundtrip_Call) Run(run func()) *MockWaylandDisplay
return _c
}
func (_c *MockWaylandDisplay_Roundtrip_Call) Return(err error) *MockWaylandDisplay_Roundtrip_Call {
_c.Call.Return(err)
func (_c *MockWaylandDisplay_Roundtrip_Call) Return(_a0 error) *MockWaylandDisplay_Roundtrip_Call {
_c.Call.Return(_a0)
return _c
}
@@ -224,3 +213,17 @@ func (_c *MockWaylandDisplay_Roundtrip_Call) RunAndReturn(run func() error) *Moc
_c.Call.Return(run)
return _c
}
// NewMockWaylandDisplay creates a new instance of MockWaylandDisplay. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockWaylandDisplay(t interface {
mock.TestingT
Cleanup(func())
}) *MockWaylandDisplay {
mock := &MockWaylandDisplay{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
@@ -1,28 +1,12 @@
// Code generated by mockery; DO NOT EDIT.
// github.com/vektra/mockery
// template: testify
// Code generated by mockery v2.53.5. DO NOT EDIT.
package mocks_wlcontext
import (
"github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
client "github.com/AvengeMedia/DankMaterialShell/core/pkg/go-wayland/wayland/client"
mock "github.com/stretchr/testify/mock"
)
// NewMockWaylandContext creates a new instance of MockWaylandContext. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockWaylandContext(t interface {
mock.TestingT
Cleanup(func())
}) *MockWaylandContext {
mock := &MockWaylandContext{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
// MockWaylandContext is an autogenerated mock type for the WaylandContext type
type MockWaylandContext struct {
mock.Mock
@@ -36,10 +20,9 @@ func (_m *MockWaylandContext) EXPECT() *MockWaylandContext_Expecter {
return &MockWaylandContext_Expecter{mock: &_m.Mock}
}
// Close provides a mock function for the type MockWaylandContext
func (_mock *MockWaylandContext) Close() {
_mock.Called()
return
// Close provides a mock function with no fields
func (_m *MockWaylandContext) Close() {
_m.Called()
}
// MockWaylandContext_Close_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Close'
@@ -69,22 +52,23 @@ func (_c *MockWaylandContext_Close_Call) RunAndReturn(run func()) *MockWaylandCo
return _c
}
// Display provides a mock function for the type MockWaylandContext
func (_mock *MockWaylandContext) Display() *client.Display {
ret := _mock.Called()
// Display provides a mock function with no fields
func (_m *MockWaylandContext) Display() *client.Display {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for Display")
}
var r0 *client.Display
if returnFunc, ok := ret.Get(0).(func() *client.Display); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() *client.Display); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*client.Display)
}
}
return r0
}
@@ -105,8 +89,8 @@ func (_c *MockWaylandContext_Display_Call) Run(run func()) *MockWaylandContext_D
return _c
}
func (_c *MockWaylandContext_Display_Call) Return(display *client.Display) *MockWaylandContext_Display_Call {
_c.Call.Return(display)
func (_c *MockWaylandContext_Display_Call) Return(_a0 *client.Display) *MockWaylandContext_Display_Call {
_c.Call.Return(_a0)
return _c
}
@@ -115,22 +99,23 @@ func (_c *MockWaylandContext_Display_Call) RunAndReturn(run func() *client.Displ
return _c
}
// FatalError provides a mock function for the type MockWaylandContext
func (_mock *MockWaylandContext) FatalError() <-chan error {
ret := _mock.Called()
// FatalError provides a mock function with no fields
func (_m *MockWaylandContext) FatalError() <-chan error {
ret := _m.Called()
if len(ret) == 0 {
panic("no return value specified for FatalError")
}
var r0 <-chan error
if returnFunc, ok := ret.Get(0).(func() <-chan error); ok {
r0 = returnFunc()
if rf, ok := ret.Get(0).(func() <-chan error); ok {
r0 = rf()
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(<-chan error)
}
}
return r0
}
@@ -151,8 +136,8 @@ func (_c *MockWaylandContext_FatalError_Call) Run(run func()) *MockWaylandContex
return _c
}
func (_c *MockWaylandContext_FatalError_Call) Return(errCh <-chan error) *MockWaylandContext_FatalError_Call {
_c.Call.Return(errCh)
func (_c *MockWaylandContext_FatalError_Call) Return(_a0 <-chan error) *MockWaylandContext_FatalError_Call {
_c.Call.Return(_a0)
return _c
}
@@ -161,10 +146,9 @@ func (_c *MockWaylandContext_FatalError_Call) RunAndReturn(run func() <-chan err
return _c
}
// Post provides a mock function for the type MockWaylandContext
func (_mock *MockWaylandContext) Post(fn func()) {
_mock.Called(fn)
return
// Post provides a mock function with given fields: fn
func (_m *MockWaylandContext) Post(fn func()) {
_m.Called(fn)
}
// MockWaylandContext_Post_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Post'
@@ -174,19 +158,13 @@ type MockWaylandContext_Post_Call struct {
// Post is a helper method to define mock.On call
// - fn func()
func (_e *MockWaylandContext_Expecter) Post(fn any) *MockWaylandContext_Post_Call {
func (_e *MockWaylandContext_Expecter) Post(fn interface{}) *MockWaylandContext_Post_Call {
return &MockWaylandContext_Post_Call{Call: _e.mock.On("Post", fn)}
}
func (_c *MockWaylandContext_Post_Call) Run(run func(fn func())) *MockWaylandContext_Post_Call {
_c.Call.Run(func(args mock.Arguments) {
var arg0 func()
if args[0] != nil {
arg0 = args[0].(func())
}
run(
arg0,
)
run(args[0].(func()))
})
return _c
}
@@ -196,15 +174,14 @@ func (_c *MockWaylandContext_Post_Call) Return() *MockWaylandContext_Post_Call {
return _c
}
func (_c *MockWaylandContext_Post_Call) RunAndReturn(run func(fn func())) *MockWaylandContext_Post_Call {
func (_c *MockWaylandContext_Post_Call) RunAndReturn(run func(func())) *MockWaylandContext_Post_Call {
_c.Run(run)
return _c
}
// Start provides a mock function for the type MockWaylandContext
func (_mock *MockWaylandContext) Start() {
_mock.Called()
return
// Start provides a mock function with no fields
func (_m *MockWaylandContext) Start() {
_m.Called()
}
// MockWaylandContext_Start_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Start'
@@ -233,3 +210,17 @@ func (_c *MockWaylandContext_Start_Call) RunAndReturn(run func()) *MockWaylandCo
_c.Run(run)
return _c
}
// NewMockWaylandContext creates a new instance of MockWaylandContext. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMockWaylandContext(t interface {
mock.TestingT
Cleanup(func())
}) *MockWaylandContext {
mock := &MockWaylandContext{}
mock.Mock.Test(t)
t.Cleanup(func() { mock.AssertExpectations(t) })
return mock
}
-3
View File
@@ -499,9 +499,6 @@ func buildManagedLockscreenU2FPamContent() string {
b.WriteString("#%PAM-1.0\n")
b.WriteString(LockscreenU2FPamManagedBlockStart + "\n")
b.WriteString("auth required pam_u2f.so cue nouserok timeout=10\n")
b.WriteString("account required pam_permit.so\n")
b.WriteString("password required pam_deny.so\n")
b.WriteString("session required pam_permit.so\n")
b.WriteString(LockscreenU2FPamManagedBlockEnd + "\n")
return b.String()
}
-51
View File
@@ -1,51 +0,0 @@
package plugins
import (
"encoding/json"
"net/http"
"time"
)
const feedbackURL = "https://api.danklinux.com/plugins"
type Feedback struct {
Upvotes int
Status []string
IssueURL string
Similar []string
}
// FetchFeedback retrieves community upvotes and moderator status from the directory API.
// Best-effort: any failure returns a nil map.
func FetchFeedback() map[string]Feedback {
client := &http.Client{Timeout: 5 * time.Second}
resp, err := client.Get(feedbackURL)
if err != nil {
return nil
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return nil
}
var payload struct {
Plugins []struct {
ID string `json:"id"`
Upvotes int `json:"upvotes"`
Status []string `json:"status"`
IssueURL string `json:"issueUrl"`
Similar []string `json:"similar"`
} `json:"plugins"`
}
if err := json.NewDecoder(resp.Body).Decode(&payload); err != nil {
return nil
}
feedback := make(map[string]Feedback, len(payload.Plugins))
for _, p := range payload.Plugins {
feedback[p.ID] = Feedback{Upvotes: p.Upvotes, Status: p.Status, IssueURL: p.IssueURL, Similar: p.Similar}
}
return feedback
}
@@ -1,22 +0,0 @@
package qmlchecks
import (
"os"
"strings"
"testing"
)
func TestGreeterRememberLastSessionFallsBackToDesktopID(t *testing.T) {
data, err := os.ReadFile("../../../quickshell/Modules/Greetd/GreeterContent.qml")
if err != nil {
t.Fatalf("read greeter QML: %v", err)
}
content := string(data)
if !strings.Contains(content, "GreetdMemory.lastSessionDesktopId || desktopIdFromPath(GreetdMemory.lastSessionId)") {
t.Fatalf("remembered greeter sessions should derive a desktop id from legacy absolute session paths")
}
if !strings.Contains(content, "GreeterState.sessionDesktopIds[i] === savedDesktopId") {
t.Fatalf("remembered greeter sessions should match current sessions by desktop id")
}
}
+2 -72
View File
@@ -6,7 +6,6 @@ import (
"os"
"sync"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/pkg/dbusutil"
"github.com/godbus/dbus/v5"
)
@@ -95,65 +94,9 @@ func (m *Manager) initializeSettings() error {
return fmt.Errorf("failed to update settings state: %w", err)
}
go m.watchSettingsChanges()
return nil
}
func (m *Manager) watchSettingsChanges() {
conn, err := dbus.ConnectSessionBus()
if err != nil {
log.Warnf("color-scheme watcher: session bus connect: %v", err)
return
}
if err := conn.AddMatchSignal(
dbus.WithMatchInterface(dbusPortalSettingsInterface),
dbus.WithMatchMember("SettingChanged"),
); err != nil {
log.Warnf("Failed to watch portal settings changes: %v", err)
conn.Close()
return
}
signals := make(chan *dbus.Signal, 64)
conn.Signal(signals)
for sig := range signals {
if sig.Name != dbusPortalSettingsInterface+".SettingChanged" {
continue
}
if len(sig.Body) < 3 {
continue
}
namespace, _ := sig.Body[0].(string)
key, _ := sig.Body[1].(string)
if namespace != "org.freedesktop.appearance" || key != "color-scheme" {
continue
}
variant, ok := sig.Body[2].(dbus.Variant)
if !ok {
continue
}
colorScheme, ok := dbusutil.As[uint32](variant)
if !ok {
continue
}
m.stateMutex.Lock()
changed := m.state.Settings.ColorScheme != colorScheme || !m.state.Settings.Available
m.state.Settings.ColorScheme = colorScheme
m.state.Settings.Available = true
m.stateMutex.Unlock()
if changed {
m.NotifySubscribers()
}
}
}
func (m *Manager) updateAccountsState() error {
if !m.state.Accounts.Available || m.accountsObj == nil {
return fmt.Errorf("accounts service not available")
@@ -191,23 +134,10 @@ func (m *Manager) updateSettingsState() error {
var variant dbus.Variant
err := m.settingsObj.Call(dbusPortalSettingsInterface+".ReadOne", 0, "org.freedesktop.appearance", "color-scheme").Store(&variant)
if err != nil {
// Older xdg-desktop-portal versions only expose the deprecated Read.
var nested dbus.Variant
if rerr := m.settingsObj.Call(dbusPortalSettingsInterface+".Read", 0, "org.freedesktop.appearance", "color-scheme").Store(&nested); rerr != nil {
log.Warnf("color-scheme: ReadOne (%v) and Read (%v) both failed", err, rerr)
return err
}
variant = nested
return err
}
colorScheme, ok := dbusutil.As[uint32](variant)
if !ok {
// Read double-wraps the value in a variant.
if inner, innerOk := variant.Value().(dbus.Variant); innerOk {
colorScheme, ok = dbusutil.As[uint32](inner)
}
}
if ok {
if colorScheme, ok := dbusutil.As[uint32](variant); ok {
m.stateMutex.Lock()
m.state.Settings.ColorScheme = colorScheme
m.stateMutex.Unlock()
-2
View File
@@ -125,8 +125,6 @@ State updates are sent whenever network configuration changes:
- `wifiConnected`: Whether associated with an access point
- `wifiSSID`: Currently connected network name
- `wifiIP`: Assigned IP address (empty until DHCP completes)
- `savedWifiNetworks` (API v26+): Saved WiFi profiles exposed at SSID granularity. If a backend has multiple profiles for the same SSID, DMS merges them into one SSID-level entry. Clients talking to older servers should derive saved visible networks from `wifiNetworks` entries where `saved` is true.
- `savedWifiNetworks[].outOfRange` (API v26+): Whether the saved profile is not currently visible in scan results. Fallback entries derived from `wifiNetworks` should be treated as visible (`outOfRange: false`).
- `lastError`: Error message from last failed connection attempt
### network.credentials Service Events
@@ -361,27 +361,11 @@ func (a *SecretAgent) GetSecrets(
}
}
// Phase 4: Non-interactive secret retrieval. REQUEST_NEW means NM thinks the
// secret is wrong, so force a prompt; otherwise reuse keyring then cached secret.
requestNew := flags&nmSecretAgentFlagRequestNew != 0
if requestNew {
if a.backend != nil {
a.backend.clearCachedWiFiSecret(connUuid)
}
} else {
if secretOut := a.trySecretService(connUuid, settingName, fields); secretOut != nil {
return secretOut, nil
}
switch settingName {
case "802-11-wireless-security", "802-1x":
if a.backend != nil {
if cached := a.backend.lookupCachedWiFiSecret(connUuid, settingName); cached != nil {
log.Infof("[SecretAgent] Reusing cached WiFi secret for %s (no REQUEST_NEW)", connUuid)
return buildWiFiSecretsResponse(settingName, cached), nil
}
}
}
// Phase 4: Non-interactive secret retrieval (keyring).
// Always try the keyring even when REQUEST_NEW is set — the vault may have
// been unlocked by a prior call's Prompt flow, making the lookup non-interactive.
if secretOut := a.trySecretService(connUuid, settingName, fields); secretOut != nil {
return secretOut, nil
}
// Phase 5: If interaction is not allowed, we're done.
@@ -452,8 +436,6 @@ func (a *SecretAgent) GetSecrets(
}
a.backend.stateMutex.Unlock()
a.backend.clearCachedWiFiSecret(connUuid)
// If this was a WiFi connection that was just cancelled, remove the connection profile
// (it was created with AddConnection but activation was cancelled)
// Only do this for newly created connections, not pre-existing ones.
@@ -557,13 +539,6 @@ func (a *SecretAgent) GetSecrets(
log.Infof("[SecretAgent] Queued credentials persist for after connection succeeds")
}
if a.backend != nil {
switch settingName {
case "802-11-wireless-security", "802-1x":
a.backend.cacheWiFiSecret(connUuid, ssid, settingName, reply.Secrets)
}
}
return out, nil
}
@@ -931,27 +906,6 @@ func reasonFromFlags(flags uint32) string {
return "required"
}
func buildWiFiSecretsResponse(settingName string, secrets map[string]string) nmSettingMap {
sec := nmVariantMap{}
switch settingName {
case "802-1x":
for k, v := range secrets {
switch k {
case "password", "private-key-password", "phase2-private-key-password", "pin":
sec[k] = dbus.MakeVariant(v)
}
}
default:
for k, v := range secrets {
sec[k] = dbus.MakeVariant(v)
}
}
out := nmSettingMap{}
out[settingName] = sec
return out
}
func buildGPSamlSecretsResponse(settingName, cookie, host, fingerprint string) nmSettingMap {
out := nmSettingMap{}
vpnSec := nmVariantMap{}
@@ -374,57 +374,6 @@ func TestSecretAgent_GetSecrets_NoInteractionFlag(t *testing.T) {
assert.Contains(t, err.Error(), "NoSecrets")
}
func TestBuildWiFiSecretsResponse(t *testing.T) {
t.Run("wpa-psk returns psk", func(t *testing.T) {
out := buildWiFiSecretsResponse("802-11-wireless-security", map[string]string{"psk": "hunter2"})
sec, ok := out["802-11-wireless-security"]
assert.True(t, ok)
assert.Equal(t, "hunter2", sec["psk"].Value())
})
t.Run("802-1x keeps secrets and drops identity", func(t *testing.T) {
out := buildWiFiSecretsResponse("802-1x", map[string]string{
"identity": "john",
"password": "hunter2",
})
sec := out["802-1x"]
assert.Equal(t, "hunter2", sec["password"].Value())
_, hasIdentity := sec["identity"]
assert.False(t, hasIdentity, "identity is persisted separately, not returned as a secret")
})
}
func TestWiFiSecretCache(t *testing.T) {
b := &NetworkManagerBackend{}
b.cacheWiFiSecret("uuid-1", "HomeNet", "802-11-wireless-security", map[string]string{"psk": "hunter2"})
got := b.lookupCachedWiFiSecret("uuid-1", "802-11-wireless-security")
assert.Equal(t, map[string]string{"psk": "hunter2"}, got)
assert.Nil(t, b.lookupCachedWiFiSecret("uuid-1", "802-1x"), "setting mismatch must miss")
assert.Nil(t, b.lookupCachedWiFiSecret("uuid-2", "802-11-wireless-security"), "uuid mismatch must miss")
assert.Nil(t, b.lookupCachedWiFiSecret("", "802-11-wireless-security"), "empty uuid must miss")
// REQUEST_NEW path clears by uuid.
b.clearCachedWiFiSecret("uuid-1")
assert.Nil(t, b.lookupCachedWiFiSecret("uuid-1", "802-11-wireless-security"))
// Returned map is a copy: mutating it must not affect the cache.
b.cacheWiFiSecret("uuid-1", "HomeNet", "802-11-wireless-security", map[string]string{"psk": "hunter2"})
got = b.lookupCachedWiFiSecret("uuid-1", "802-11-wireless-security")
got["psk"] = "tampered"
assert.Equal(t, "hunter2", b.lookupCachedWiFiSecret("uuid-1", "802-11-wireless-security")["psk"])
// Terminal-state path clears by SSID.
b.clearCachedWiFiSecretBySSID("OtherNet")
assert.NotNil(t, b.lookupCachedWiFiSecret("uuid-1", "802-11-wireless-security"), "ssid mismatch must not clear")
b.clearCachedWiFiSecretBySSID("HomeNet")
assert.Nil(t, b.lookupCachedWiFiSecret("uuid-1", "802-11-wireless-security"))
}
func TestNmVariantMap(t *testing.T) {
// Test that nmVariantMap and nmSettingMap work correctly
settingMap := make(nmSettingMap)
-3
View File
@@ -67,7 +67,6 @@ type BackendState struct {
WiFiBSSID string
WiFiSignal uint8
WiFiNetworks []WiFiNetwork
SavedWiFiNetworks []WiFiNetwork
WiFiDevices []WiFiDevice
WiredConnections []WiredConnection
VPNProfiles []VPNProfile
@@ -79,6 +78,4 @@ type BackendState struct {
IsConnectingVPN bool
ConnectingVPNUUID string
LastError string
VPNError string
VPNErrorUuid string
}
@@ -27,19 +27,6 @@ func TestHybridIwdNetworkdBackend_GetCurrentState_MergesState(t *testing.T) {
wifi.state.WiFiBSSID = "00:11:22:33:44:55"
wifi.state.WiFiSignal = 75
wifi.state.WiFiDevice = "wlan0"
wifi.state.SavedWiFiNetworks = []WiFiNetwork{
{
SSID: "TestNetwork",
Saved: true,
Autoconnect: true,
Connected: true,
},
{
SSID: "AwayNetwork",
Saved: true,
OutOfRange: true,
},
}
l3.state.WiFiIP = "192.168.1.100"
l3.state.EthernetConnected = false
@@ -55,9 +42,6 @@ func TestHybridIwdNetworkdBackend_GetCurrentState_MergesState(t *testing.T) {
assert.True(t, state.WiFiConnected)
assert.False(t, state.EthernetConnected)
assert.Equal(t, StatusWiFi, state.NetworkStatus)
assert.Len(t, state.SavedWiFiNetworks, 2)
assert.Equal(t, "TestNetwork", state.SavedWiFiNetworks[0].SSID)
assert.True(t, state.SavedWiFiNetworks[1].OutOfRange)
}
func TestHybridIwdNetworkdBackend_GetCurrentState_EthernetPriority(t *testing.T) {
@@ -80,10 +80,6 @@ func (b *IWDBackend) Initialize() error {
return fmt.Errorf("failed to discover iwd devices: %w", err)
}
if err := b.updateSavedWiFiNetworks(); err != nil {
log.Warnf("Failed to get initial saved WiFi networks: %v", err)
}
if err := b.updateState(); err != nil {
conn.Close()
return fmt.Errorf("failed to get initial state: %w", err)
@@ -149,7 +145,6 @@ func (b *IWDBackend) GetCurrentState() (*BackendState, error) {
state := *b.state
state.WiFiNetworks = append([]WiFiNetwork(nil), b.state.WiFiNetworks...)
state.SavedWiFiNetworks = append([]WiFiNetwork(nil), b.state.SavedWiFiNetworks...)
state.WiredConnections = append([]WiredConnection(nil), b.state.WiredConnections...)
state.WiFiDevices = b.getWiFiDevicesLocked()
@@ -45,42 +45,12 @@ func (b *IWDBackend) StartMonitoring(onStateChange func()) error {
}
}
if err := b.conn.AddMatchSignal(
dbus.WithMatchInterface(dbusPropertiesInterface),
dbus.WithMatchMember("PropertiesChanged"),
dbus.WithMatchArg(0, iwdKnownNetworkInterface),
); err != nil {
return fmt.Errorf("failed to add known network signal match: %w", err)
}
if err := b.conn.AddMatchSignal(
dbus.WithMatchInterface(dbusObjectManager),
dbus.WithMatchMember("InterfacesAdded"),
); err != nil {
return fmt.Errorf("failed to add iwd interfaces-added signal match: %w", err)
}
if err := b.conn.AddMatchSignal(
dbus.WithMatchInterface(dbusObjectManager),
dbus.WithMatchMember("InterfacesRemoved"),
); err != nil {
return fmt.Errorf("failed to add iwd interfaces-removed signal match: %w", err)
}
b.sigWG.Add(1)
go b.signalHandler(sigChan)
return nil
}
func (b *IWDBackend) refreshWiFiNetworkState() bool {
_, err := b.updateWiFiNetworks()
if err == nil {
return true
}
return b.updateSavedWiFiNetworks() == nil
}
func (b *IWDBackend) signalHandler(sigChan chan *dbus.Signal) {
defer b.sigWG.Done()
@@ -96,36 +66,11 @@ func (b *IWDBackend) signalHandler(sigChan chan *dbus.Signal) {
return
}
if sig.Name == dbusObjectManager+".InterfacesAdded" {
if len(sig.Body) >= 2 {
if interfaces, ok := sig.Body[1].(map[string]map[string]dbus.Variant); ok {
if _, ok := interfaces[iwdKnownNetworkInterface]; ok {
if b.refreshWiFiNetworkState() && b.onStateChange != nil {
b.onStateChange()
}
}
}
}
if sig.Name != dbusPropertiesInterface+".PropertiesChanged" {
continue
}
if sig.Name == dbusObjectManager+".InterfacesRemoved" {
if len(sig.Body) >= 2 {
if interfaces, ok := sig.Body[1].([]string); ok {
for _, iface := range interfaces {
if iface == iwdKnownNetworkInterface {
if b.refreshWiFiNetworkState() && b.onStateChange != nil {
b.onStateChange()
}
break
}
}
}
}
continue
}
if sig.Name != dbusPropertiesInterface+".PropertiesChanged" || len(sig.Body) < 2 {
if len(sig.Body) < 2 {
continue
}
@@ -142,9 +87,6 @@ func (b *IWDBackend) signalHandler(sigChan chan *dbus.Signal) {
stateChanged := false
switch iface {
case iwdKnownNetworkInterface:
stateChanged = b.refreshWiFiNetworkState()
case iwdDeviceInterface:
if sig.Path == b.devicePath {
if poweredVar, ok := changed["Powered"]; ok {
@@ -163,7 +105,13 @@ func (b *IWDBackend) signalHandler(sigChan chan *dbus.Signal) {
if sig.Path == b.stationPath {
if scanningVar, ok := changed["Scanning"]; ok {
if scanning, ok := scanningVar.Value().(bool); ok && !scanning {
stateChanged = b.refreshWiFiNetworkState() || stateChanged
networks, err := b.updateWiFiNetworks()
if err == nil {
b.stateMutex.Lock()
b.state.WiFiNetworks = networks
b.stateMutex.Unlock()
stateChanged = true
}
b.stateMutex.RLock()
wifiConnected := b.state.WiFiConnected
@@ -288,7 +236,6 @@ func (b *IWDBackend) signalHandler(sigChan chan *dbus.Signal) {
}
}
b.refreshWiFiNetworkState()
stateChanged = true
if att != nil && isTarget {
@@ -335,7 +282,6 @@ func (b *IWDBackend) signalHandler(sigChan chan *dbus.Signal) {
b.state.NetworkStatus = StatusDisconnected
}
b.stateMutex.Unlock()
b.refreshWiFiNetworkState()
stateChanged = true
}
}
@@ -396,7 +342,6 @@ func (b *IWDBackend) signalHandler(sigChan chan *dbus.Signal) {
stateChanged = true
}
b.stateMutex.Unlock()
b.refreshWiFiNetworkState()
}
}
}
@@ -4,7 +4,6 @@ import (
"testing"
"time"
"github.com/godbus/dbus/v5"
"github.com/stretchr/testify/assert"
)
@@ -169,92 +168,6 @@ func TestIWDBackend_MapIwdDBusError(t *testing.T) {
}
}
func TestIWDSavedWiFiProfilesFromManagedObjects(t *testing.T) {
objects := map[dbus.ObjectPath]map[string]map[string]dbus.Variant{
"/net/connman/iwd/known_network/1": {
iwdKnownNetworkInterface: {
"Name": dbus.MakeVariant("Home"),
"AutoConnect": dbus.MakeVariant(false),
"Hidden": dbus.MakeVariant(true),
"Type": dbus.MakeVariant("psk"),
},
},
"/net/connman/iwd/known_network/2": {
iwdKnownNetworkInterface: {
"Name": dbus.MakeVariant("Office"),
"Type": dbus.MakeVariant("8021x"),
},
},
"/net/connman/iwd/known_network/3": {
iwdKnownNetworkInterface: {
"Name": dbus.MakeVariant("Cafe"),
"Type": dbus.MakeVariant("open"),
},
},
"/net/connman/iwd/network/1": {
iwdNetworkInterface: {
"Name": dbus.MakeVariant("VisibleOnly"),
},
},
}
profiles := iwdSavedWiFiProfilesFromManagedObjects(objects)
assert.Len(t, profiles, 3)
assert.False(t, profiles["Home"].Autoconnect)
assert.True(t, profiles["Home"].Hidden)
assert.True(t, profiles["Home"].Secured)
assert.False(t, profiles["Home"].Enterprise)
assert.True(t, profiles["Office"].Autoconnect)
assert.True(t, profiles["Office"].Secured)
assert.True(t, profiles["Office"].Enterprise)
assert.True(t, profiles["Cafe"].Autoconnect)
assert.False(t, profiles["Cafe"].Secured)
assert.False(t, profiles["Cafe"].Enterprise)
}
func TestIWDWiFiNetworksFromVisibleIncludesConnectedHiddenFallback(t *testing.T) {
profiles := map[string]savedWiFiProfile{
"Home": {
Autoconnect: true,
Secured: true,
Hidden: true,
Mode: "infrastructure",
},
}
visible := []WiFiNetwork{
{
SSID: "Cafe",
Signal: 42,
Secured: false,
},
}
networks := iwdWiFiNetworksFromVisible(visible, profiles, "Home", true, 68)
savedNetworks := savedWiFiNetworksFromProfiles(profiles, map[string]WiFiNetwork{
networks[0].SSID: networks[0],
networks[1].SSID: networks[1],
}, "Home", true)
assert.Len(t, networks, 2)
assert.Equal(t, "Cafe", networks[0].SSID)
assert.False(t, networks[0].Connected)
assert.Equal(t, "Home", networks[1].SSID)
assert.True(t, networks[1].Connected)
assert.True(t, networks[1].Hidden)
assert.True(t, networks[1].Saved)
assert.True(t, networks[1].Autoconnect)
assert.Equal(t, uint8(68), networks[1].Signal)
assert.Len(t, savedNetworks, 1)
assert.Equal(t, "Home", savedNetworks[0].SSID)
assert.True(t, savedNetworks[0].Connected)
assert.False(t, savedNetworks[0].OutOfRange)
}
func TestConnectAttempt_Finalization(t *testing.T) {
backend, _ := NewIWDBackend()
backend.state = &BackendState{}
+60 -143
View File
@@ -164,18 +164,22 @@ func (b *IWDBackend) updateWiFiNetworks() ([]WiFiNetwork, error) {
return nil, fmt.Errorf("failed to get networks: %w", err)
}
savedProfiles, err := b.getIWDSavedWiFiProfiles()
knownNetworks, err := b.getKnownNetworks()
if err != nil {
savedProfiles = make(map[string]savedWiFiProfile)
knownNetworks = make(map[string]bool)
}
autoconnectMap, err := b.getAutoconnectSettings()
if err != nil {
autoconnectMap = make(map[string]bool)
}
b.stateMutex.RLock()
currentSSID := b.state.WiFiSSID
wifiConnected := b.state.WiFiConnected
wifiSignal := b.state.WiFiSignal
b.stateMutex.RUnlock()
visibleNetworks := make([]WiFiNetwork, 0, len(orderedNetworks))
networks := make([]WiFiNetwork, 0, len(orderedNetworks))
for _, netData := range orderedNetworks {
if len(netData) < 2 {
continue
@@ -221,26 +225,23 @@ func (b *IWDBackend) updateWiFiNetworks() ([]WiFiNetwork, error) {
secured := netType != "open"
visibleNetworks = append(visibleNetworks, WiFiNetwork{
SSID: name,
Signal: signal,
Secured: secured,
Enterprise: netType == "8021x",
})
}
network := WiFiNetwork{
SSID: name,
Signal: signal,
Secured: secured,
Connected: wifiConnected && name == currentSSID,
Saved: knownNetworks[name],
Autoconnect: autoconnectMap[name],
Enterprise: netType == "8021x",
}
networks := iwdWiFiNetworksFromVisible(visibleNetworks, savedProfiles, currentSSID, wifiConnected, wifiSignal)
visibleNetworkMap := make(map[string]WiFiNetwork, len(networks))
for _, network := range networks {
visibleNetworkMap[network.SSID] = network
networks = append(networks, network)
}
savedNetworks := savedWiFiNetworksFromProfiles(savedProfiles, visibleNetworkMap, currentSSID, wifiConnected)
sortWiFiNetworks(networks)
b.stateMutex.Lock()
b.state.WiFiNetworks = networks
b.state.SavedWiFiNetworks = savedNetworks
b.stateMutex.Unlock()
now := time.Now()
@@ -253,129 +254,7 @@ func (b *IWDBackend) updateWiFiNetworks() ([]WiFiNetwork, error) {
return networks, nil
}
func (b *IWDBackend) updateSavedWiFiNetworks() error {
savedProfiles, err := b.getIWDSavedWiFiProfiles()
if err != nil {
return err
}
b.stateMutex.RLock()
currentSSID := b.state.WiFiSSID
wifiConnected := b.state.WiFiConnected
wifiNetworks := append([]WiFiNetwork(nil), b.state.WiFiNetworks...)
b.stateMutex.RUnlock()
wifiNetworks, savedNetworks := refreshSavedWiFiState(wifiNetworks, savedProfiles, currentSSID, wifiConnected)
b.stateMutex.Lock()
b.state.WiFiNetworks = wifiNetworks
b.state.SavedWiFiNetworks = savedNetworks
b.stateMutex.Unlock()
return nil
}
func iwdWiFiNetworksFromVisible(visibleNetworks []WiFiNetwork, savedProfiles map[string]savedWiFiProfile, currentSSID string, wifiConnected bool, wifiSignal uint8) []WiFiNetwork {
networks := make([]WiFiNetwork, 0, len(visibleNetworks)+1)
seenSSIDs := make(map[string]struct{}, len(visibleNetworks)+1)
for _, network := range visibleNetworks {
profile, saved := savedProfiles[network.SSID]
network.Connected = wifiConnected && network.SSID == currentSSID
network.Saved = saved
network.Autoconnect = profile.Autoconnect
network.Hidden = network.Hidden || profile.Hidden
network.Secured = network.Secured || profile.Secured
network.Enterprise = network.Enterprise || profile.Enterprise
if network.Mode == "" {
network.Mode = profile.Mode
}
networks = append(networks, network)
seenSSIDs[network.SSID] = struct{}{}
}
if wifiConnected && currentSSID != "" {
if _, exists := seenSSIDs[currentSSID]; !exists {
profile, saved := savedProfiles[currentSSID]
secured := profile.Secured
if !saved {
secured = true
}
mode := profile.Mode
if mode == "" {
mode = "infrastructure"
}
networks = append(networks, WiFiNetwork{
SSID: currentSSID,
Signal: wifiSignal,
Secured: secured,
Enterprise: profile.Enterprise,
Connected: true,
Saved: saved,
Autoconnect: profile.Autoconnect,
Hidden: true,
Mode: mode,
})
}
}
return networks
}
func iwdSavedWiFiProfilesFromManagedObjects(objects map[dbus.ObjectPath]map[string]map[string]dbus.Variant) map[string]savedWiFiProfile {
profiles := make(map[string]savedWiFiProfile)
for _, interfaces := range objects {
knownProps, ok := interfaces[iwdKnownNetworkInterface]
if !ok {
continue
}
nameVar, ok := knownProps["Name"]
if !ok {
continue
}
name, ok := nameVar.Value().(string)
if !ok || name == "" {
continue
}
profile := savedWiFiProfile{
Autoconnect: true,
Mode: "infrastructure",
}
if acVar, ok := knownProps["AutoConnect"]; ok {
if autoconnect, ok := acVar.Value().(bool); ok {
profile.Autoconnect = autoconnect
}
}
if hiddenVar, ok := knownProps["Hidden"]; ok {
if hidden, ok := hiddenVar.Value().(bool); ok {
profile.Hidden = hidden
}
}
if typeVar, ok := knownProps["Type"]; ok {
if networkType, ok := typeVar.Value().(string); ok {
profile.Secured = networkType != "" && networkType != "open"
profile.Enterprise = networkType == "8021x"
}
}
if existing, ok := profiles[name]; ok {
profile.Autoconnect = profile.Autoconnect || existing.Autoconnect
profile.Hidden = profile.Hidden || existing.Hidden
profile.Secured = profile.Secured || existing.Secured
profile.Enterprise = profile.Enterprise || existing.Enterprise
}
profiles[name] = profile
}
return profiles
}
func (b *IWDBackend) getIWDSavedWiFiProfiles() (map[string]savedWiFiProfile, error) {
func (b *IWDBackend) getKnownNetworks() (map[string]bool, error) {
obj := b.conn.Object(iwdBusName, iwdObjectPath)
var objects map[dbus.ObjectPath]map[string]map[string]dbus.Variant
@@ -384,7 +263,47 @@ func (b *IWDBackend) getIWDSavedWiFiProfiles() (map[string]savedWiFiProfile, err
return nil, err
}
return iwdSavedWiFiProfilesFromManagedObjects(objects), nil
known := make(map[string]bool)
for _, interfaces := range objects {
if knownProps, ok := interfaces[iwdKnownNetworkInterface]; ok {
if nameVar, ok := knownProps["Name"]; ok {
if name, ok := nameVar.Value().(string); ok {
known[name] = true
}
}
}
}
return known, nil
}
func (b *IWDBackend) getAutoconnectSettings() (map[string]bool, error) {
obj := b.conn.Object(iwdBusName, iwdObjectPath)
var objects map[dbus.ObjectPath]map[string]map[string]dbus.Variant
err := obj.Call(dbusObjectManager+".GetManagedObjects", 0).Store(&objects)
if err != nil {
return nil, err
}
autoconnectMap := make(map[string]bool)
for _, interfaces := range objects {
if knownProps, ok := interfaces[iwdKnownNetworkInterface]; ok {
if nameVar, ok := knownProps["Name"]; ok {
if name, ok := nameVar.Value().(string); ok {
autoconnect := true
if acVar, ok := knownProps["AutoConnect"]; ok {
if ac, ok := acVar.Value().(bool); ok {
autoconnect = ac
}
}
autoconnectMap[name] = autoconnect
}
}
}
}
return autoconnectMap, nil
}
func (b *IWDBackend) GetWiFiNetworkDetails(ssid string) (*NetworkInfoResponse, error) {
@@ -695,8 +614,6 @@ func (b *IWDBackend) ForgetWiFiNetwork(ssid string) error {
b.stateMutex.Unlock()
}
_, _ = b.updateWiFiNetworks()
if b.onStateChange != nil {
b.onStateChange()
}
@@ -16,9 +16,6 @@ const (
dbusNMWiredInterface = "org.freedesktop.NetworkManager.Device.Wired"
dbusNMWirelessInterface = "org.freedesktop.NetworkManager.Device.Wireless"
dbusNMAccessPointInterface = "org.freedesktop.NetworkManager.AccessPoint"
dbusNMActiveConnInterface = "org.freedesktop.NetworkManager.Connection.Active"
dbusNMVPNConnInterface = "org.freedesktop.NetworkManager.VPN.Connection"
dbusNMActiveConnPath = "/org/freedesktop/NetworkManager/ActiveConnection"
dbusPropsInterface = "org.freedesktop.DBus.Properties"
NmDeviceStateReasonWrongPassword = 8
@@ -80,8 +77,6 @@ type NetworkManagerBackend struct {
cachedPKCS11Mu sync.Mutex
cachedGPSamlCookie *cachedGPSamlCookie
cachedGPSamlMu sync.Mutex
cachedWiFiSecret *cachedWiFiSecret
cachedWiFiSecretMu sync.Mutex
onStateChange func()
}
@@ -104,15 +99,6 @@ type cachedPKCS11PIN struct {
PIN string
}
// cachedWiFiSecret reuses a just-entered WiFi/802.1x secret across repeat
// GetSecrets calls in one activation, so NM retries don't re-prompt.
type cachedWiFiSecret struct {
ConnectionUUID string
SSID string
SettingName string
Secrets map[string]string
}
type cachedGPSamlCookie struct {
ConnectionUUID string
Cookie string
@@ -236,10 +222,6 @@ func (b *NetworkManagerBackend) Initialize() error {
log.Warnf("Failed to update WiFi state: %v", err)
}
if err := b.updateSavedWiFiNetworks(); err != nil {
log.Warnf("Failed to get initial saved WiFi networks: %v", err)
}
if wifiEnabled {
if _, err := b.updateWiFiNetworks(); err != nil {
log.Warnf("Failed to get initial networks: %v", err)
@@ -279,7 +261,6 @@ func (b *NetworkManagerBackend) GetCurrentState() (*BackendState, error) {
state := *b.state
state.WiFiNetworks = append([]WiFiNetwork(nil), b.state.WiFiNetworks...)
state.SavedWiFiNetworks = append([]WiFiNetwork(nil), b.state.SavedWiFiNetworks...)
state.WiFiDevices = append([]WiFiDevice(nil), b.state.WiFiDevices...)
state.WiredConnections = append([]WiredConnection(nil), b.state.WiredConnections...)
state.EthernetDevices = append([]EthernetDevice(nil), b.state.EthernetDevices...)
@@ -354,104 +335,6 @@ func (b *NetworkManagerBackend) CancelCredentials(token string) error {
})
}
// mergeStoredSecrets re-fetches stored secrets and folds them into settings
// before an Update. GetSettings never returns secrets and Update replaces the
// whole connection, so a bare GetSettings->Update wipes system-owned passwords
// (e.g. an OpenVPN password with password-flags=0). Only fills keys that aren't
// already being set, so an explicit credential change still wins.
func mergeStoredSecrets(conn gonetworkmanager.Connection, settings gonetworkmanager.ConnectionSettings) {
for setting := range settings {
switch setting {
case "vpn", "802-11-wireless-security", "802-1x":
default:
continue
}
secrets, err := conn.GetSecrets(setting)
if err != nil {
continue
}
section, ok := secrets[setting]
if !ok {
continue
}
for k, v := range section {
if _, exists := settings[setting][k]; exists {
continue
}
settings[setting][k] = v
}
}
}
func (b *NetworkManagerBackend) cacheWiFiSecret(connUUID, ssid, settingName string, secrets map[string]string) {
if connUUID == "" || len(secrets) == 0 {
return
}
copied := make(map[string]string, len(secrets))
for k, v := range secrets {
copied[k] = v
}
b.cachedWiFiSecretMu.Lock()
b.cachedWiFiSecret = &cachedWiFiSecret{
ConnectionUUID: connUUID,
SSID: ssid,
SettingName: settingName,
Secrets: copied,
}
b.cachedWiFiSecretMu.Unlock()
}
func (b *NetworkManagerBackend) lookupCachedWiFiSecret(connUUID, settingName string) map[string]string {
if connUUID == "" {
return nil
}
b.cachedWiFiSecretMu.Lock()
defer b.cachedWiFiSecretMu.Unlock()
cached := b.cachedWiFiSecret
if cached == nil || cached.ConnectionUUID != connUUID || cached.SettingName != settingName {
return nil
}
copied := make(map[string]string, len(cached.Secrets))
for k, v := range cached.Secrets {
copied[k] = v
}
return copied
}
func (b *NetworkManagerBackend) clearCachedWiFiSecret(connUUID string) {
b.cachedWiFiSecretMu.Lock()
defer b.cachedWiFiSecretMu.Unlock()
if connUUID == "" {
b.cachedWiFiSecret = nil
return
}
if b.cachedWiFiSecret != nil && b.cachedWiFiSecret.ConnectionUUID == connUUID {
b.cachedWiFiSecret = nil
}
}
func (b *NetworkManagerBackend) clearCachedWiFiSecretBySSID(ssid string) {
if ssid == "" {
return
}
b.cachedWiFiSecretMu.Lock()
defer b.cachedWiFiSecretMu.Unlock()
if b.cachedWiFiSecret != nil && b.cachedWiFiSecret.SSID == ssid {
b.cachedWiFiSecret = nil
}
}
func (b *NetworkManagerBackend) ensureWiFiDevice() error {
if b.wifiDev != nil {
return nil
@@ -5,12 +5,6 @@ import (
"github.com/godbus/dbus/v5"
)
const (
dbusNMSettingsPath = "/org/freedesktop/NetworkManager/Settings"
dbusNMSettingsInterface = "org.freedesktop.NetworkManager.Settings"
dbusNMSettingsConnectionInterface = "org.freedesktop.NetworkManager.Settings.Connection"
)
func (b *NetworkManagerBackend) startSignalPump() error {
conn, err := dbus.ConnectSystemBus()
if err != nil {
@@ -33,8 +27,8 @@ func (b *NetworkManagerBackend) startSignalPump() error {
}
if err := conn.AddMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMSettingsPath)),
dbus.WithMatchInterface(dbusNMSettingsInterface),
dbus.WithMatchObjectPath(dbus.ObjectPath("/org/freedesktop/NetworkManager/Settings")),
dbus.WithMatchInterface("org.freedesktop.NetworkManager.Settings"),
dbus.WithMatchMember("NewConnection"),
); err != nil {
conn.RemoveMatchSignal(
@@ -48,8 +42,8 @@ func (b *NetworkManagerBackend) startSignalPump() error {
}
if err := conn.AddMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMSettingsPath)),
dbus.WithMatchInterface(dbusNMSettingsInterface),
dbus.WithMatchObjectPath(dbus.ObjectPath("/org/freedesktop/NetworkManager/Settings")),
dbus.WithMatchInterface("org.freedesktop.NetworkManager.Settings"),
dbus.WithMatchMember("ConnectionRemoved"),
); err != nil {
conn.RemoveMatchSignal(
@@ -58,8 +52,8 @@ func (b *NetworkManagerBackend) startSignalPump() error {
dbus.WithMatchMember("PropertiesChanged"),
)
conn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMSettingsPath)),
dbus.WithMatchInterface(dbusNMSettingsInterface),
dbus.WithMatchObjectPath(dbus.ObjectPath("/org/freedesktop/NetworkManager/Settings")),
dbus.WithMatchInterface("org.freedesktop.NetworkManager.Settings"),
dbus.WithMatchMember("NewConnection"),
)
conn.RemoveSignal(signals)
@@ -67,31 +61,6 @@ func (b *NetworkManagerBackend) startSignalPump() error {
return err
}
if err := conn.AddMatchSignal(
dbus.WithMatchPathNamespace(dbus.ObjectPath(dbusNMSettingsPath)),
dbus.WithMatchInterface(dbusNMSettingsConnectionInterface),
dbus.WithMatchMember("Updated"),
); err != nil {
conn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMPath)),
dbus.WithMatchInterface(dbusPropsInterface),
dbus.WithMatchMember("PropertiesChanged"),
)
conn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMSettingsPath)),
dbus.WithMatchInterface(dbusNMSettingsInterface),
dbus.WithMatchMember("NewConnection"),
)
conn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMSettingsPath)),
dbus.WithMatchInterface(dbusNMSettingsInterface),
dbus.WithMatchMember("ConnectionRemoved"),
)
conn.RemoveSignal(signals)
conn.Close()
return err
}
if err := conn.AddMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMPath)),
dbus.WithMatchInterface(dbusNMInterface),
@@ -136,29 +105,6 @@ func (b *NetworkManagerBackend) startSignalPump() error {
}
}
// activating->activated/failed fires on the active-connection object, not the
// manager's ActiveConnections property. VPN.Connection covers plugin VPNs;
// Connection.Active covers the rest, including WireGuard.
if err := conn.AddMatchSignal(
dbus.WithMatchPathNamespace(dbus.ObjectPath(dbusNMActiveConnPath)),
dbus.WithMatchInterface(dbusNMVPNConnInterface),
dbus.WithMatchMember("VpnStateChanged"),
); err != nil {
conn.RemoveSignal(signals)
conn.Close()
return err
}
if err := conn.AddMatchSignal(
dbus.WithMatchPathNamespace(dbus.ObjectPath(dbusNMActiveConnPath)),
dbus.WithMatchInterface(dbusNMActiveConnInterface),
dbus.WithMatchMember("StateChanged"),
); err != nil {
conn.RemoveSignal(signals)
conn.Close()
return err
}
b.sigWG.Add(1)
go func() {
defer b.sigWG.Done()
@@ -191,42 +137,6 @@ func (b *NetworkManagerBackend) stopSignalPump() {
dbus.WithMatchMember("PropertiesChanged"),
)
b.dbusConn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMSettingsPath)),
dbus.WithMatchInterface(dbusNMSettingsInterface),
dbus.WithMatchMember("NewConnection"),
)
b.dbusConn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMSettingsPath)),
dbus.WithMatchInterface(dbusNMSettingsInterface),
dbus.WithMatchMember("ConnectionRemoved"),
)
b.dbusConn.RemoveMatchSignal(
dbus.WithMatchPathNamespace(dbus.ObjectPath(dbusNMSettingsPath)),
dbus.WithMatchInterface(dbusNMSettingsConnectionInterface),
dbus.WithMatchMember("Updated"),
)
b.dbusConn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMPath)),
dbus.WithMatchInterface(dbusNMInterface),
dbus.WithMatchMember("DeviceAdded"),
)
b.dbusConn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(dbusNMPath)),
dbus.WithMatchInterface(dbusNMInterface),
dbus.WithMatchMember("DeviceRemoved"),
)
b.dbusConn.RemoveMatchSignal(
dbus.WithMatchPathNamespace(dbus.ObjectPath(dbusNMActiveConnPath)),
dbus.WithMatchInterface(dbusNMVPNConnInterface),
dbus.WithMatchMember("VpnStateChanged"),
)
b.dbusConn.RemoveMatchSignal(
dbus.WithMatchPathNamespace(dbus.ObjectPath(dbusNMActiveConnPath)),
dbus.WithMatchInterface(dbusNMActiveConnInterface),
dbus.WithMatchMember("StateChanged"),
)
for _, info := range b.wifiDevices {
b.dbusConn.RemoveMatchSignal(
dbus.WithMatchObjectPath(dbus.ObjectPath(info.device.GetPath())),
@@ -254,33 +164,15 @@ func (b *NetworkManagerBackend) stopSignalPump() {
}
func (b *NetworkManagerBackend) handleDBusSignal(sig *dbus.Signal) {
if sig.Name == dbusNMSettingsInterface+".NewConnection" ||
sig.Name == dbusNMSettingsInterface+".ConnectionRemoved" ||
sig.Name == dbusNMSettingsConnectionInterface+".Updated" {
if sig.Name == "org.freedesktop.NetworkManager.Settings.NewConnection" ||
sig.Name == "org.freedesktop.NetworkManager.Settings.ConnectionRemoved" {
b.ListVPNProfiles()
if err := b.updateSavedWiFiNetworks(); err != nil {
b.updateWiFiNetworks()
}
if b.onStateChange != nil {
b.onStateChange()
}
return
}
if sig.Name == dbusNMVPNConnInterface+".VpnStateChanged" {
if len(sig.Body) >= 2 {
state, _ := sig.Body[0].(uint32)
reason, _ := sig.Body[1].(uint32)
b.handleVPNStateChange(state, reason)
}
return
}
if sig.Name == dbusNMActiveConnInterface+".StateChanged" {
b.handleActiveConnectionStateChange()
return
}
if sig.Name == "org.freedesktop.NetworkManager.DeviceAdded" {
if len(sig.Body) >= 1 {
if devicePath, ok := sig.Body[0].(dbus.ObjectPath); ok {
@@ -367,27 +259,6 @@ func (b *NetworkManagerBackend) handleNetworkManagerChange(changes map[string]db
}
}
func (b *NetworkManagerBackend) handleActiveConnectionStateChange() {
b.updateVPNConnectionState()
b.ListActiveVPN()
if b.onStateChange != nil {
b.onStateChange()
}
}
func (b *NetworkManagerBackend) handleVPNStateChange(state, reason uint32) {
if state == nmVPNStateFailed {
b.stateMutex.Lock()
if uuid := b.state.ConnectingVPNUUID; uuid != "" {
b.state.VPNError = vpnFailureMessage(reason)
b.state.VPNErrorUuid = uuid
}
b.stateMutex.Unlock()
}
b.handleActiveConnectionStateChange()
}
func (b *NetworkManagerBackend) handleDeviceChange(devicePath dbus.ObjectPath, changes map[string]dbus.Variant) {
var needsUpdate bool
var stateChanged bool
@@ -213,7 +213,6 @@ func (b *NetworkManagerBackend) updateWiFiState() error {
}
var forgetSSID string
var doneSSID string
b.stateMutex.Lock()
@@ -227,7 +226,6 @@ func (b *NetworkManagerBackend) updateWiFiState() error {
b.state.IsConnecting = false
b.state.ConnectingSSID = ""
b.state.LastError = ""
doneSSID = connectingSSID
case failed || (disconnected && !connected):
log.Warnf("[updateWiFiState] Connection failed: SSID=%s, state=%d", connectingSSID, state)
b.state.IsConnecting = false
@@ -242,8 +240,6 @@ func (b *NetworkManagerBackend) updateWiFiState() error {
b.lastFailedSSID = connectingSSID
b.lastFailedTime = time.Now().Unix()
b.failedMutex.Unlock()
doneSSID = connectingSSID
}
}
@@ -256,10 +252,6 @@ func (b *NetworkManagerBackend) updateWiFiState() error {
b.stateMutex.Unlock()
if doneSSID != "" {
b.clearCachedWiFiSecretBySSID(doneSSID)
}
if forgetSSID != "" {
log.Infof("[updateWiFiState] User cancelled authentication, removing connection profile for %s", forgetSSID)
if err := b.ForgetWiFiNetwork(forgetSSID); err != nil {
@@ -17,24 +17,6 @@ import (
"github.com/godbus/dbus/v5"
)
const nmVPNStateFailed = 6
// vpnFailureMessage maps NMVpnConnectionStateReason to a user-facing message.
func vpnFailureMessage(reason uint32) string {
switch reason {
case 9: // NO_SECRETS
return "Authentication required"
case 10: // LOGIN_FAILED
return "Authentication failed"
case 6: // CONNECT_TIMEOUT
return "Connection timed out"
case 7, 8: // SERVICE_START_TIMEOUT, SERVICE_START_FAILED
return "VPN service failed to start"
default:
return "VPN connection failed"
}
}
func (b *NetworkManagerBackend) ListVPNProfiles() ([]VPNProfile, error) {
s := b.settings
if s == nil {
@@ -217,38 +199,25 @@ func (b *NetworkManagerBackend) ListActiveVPN() ([]VPNActive, error) {
}
func (b *NetworkManagerBackend) ConnectVPN(uuidOrName string, singleActive bool) error {
// Drop any stale connecting state from a prior attempt that never resolved;
// a leftover flag makes the secret agent refuse secrets for other VPNs.
b.stateMutex.Lock()
b.state.IsConnectingVPN = false
b.state.ConnectingVPNUUID = ""
b.state.VPNError = ""
b.state.VPNErrorUuid = ""
b.stateMutex.Unlock()
if singleActive {
active, err := b.ListActiveVPN()
if err == nil && len(active) > 0 {
alreadyConnected := false
for _, vpn := range active {
if vpn.UUID != uuidOrName && vpn.Name != uuidOrName {
continue
}
switch vpn.State {
case "activated", "activating":
if vpn.UUID == uuidOrName || vpn.Name == uuidOrName {
alreadyConnected = true
break
}
break
}
if alreadyConnected {
if !alreadyConnected {
if err := b.DisconnectAllVPN(); err != nil {
log.Warnf("Failed to disconnect existing VPNs: %v", err)
}
time.Sleep(500 * time.Millisecond)
} else {
return nil
}
if err := b.DisconnectAllVPN(); err != nil {
log.Warnf("Failed to disconnect existing VPNs: %v", err)
}
time.Sleep(500 * time.Millisecond)
}
}
@@ -754,8 +723,6 @@ func (b *NetworkManagerBackend) updateVPNConnectionState() {
b.state.IsConnectingVPN = false
b.state.ConnectingVPNUUID = ""
b.state.LastError = ""
b.state.VPNError = ""
b.state.VPNErrorUuid = ""
b.stateMutex.Unlock()
// Clear cached PKCS11 PIN and SAML cookie on success
@@ -781,10 +748,6 @@ func (b *NetworkManagerBackend) updateVPNConnectionState() {
b.state.IsConnectingVPN = false
b.state.ConnectingVPNUUID = ""
b.state.LastError = "VPN connection failed"
if b.state.VPNError == "" {
b.state.VPNError = "VPN connection failed"
}
b.state.VPNErrorUuid = connectingVPNUUID
b.stateMutex.Unlock()
// Clear cached PKCS11 PIN and SAML cookie on failure
@@ -805,10 +768,6 @@ func (b *NetworkManagerBackend) updateVPNConnectionState() {
b.state.IsConnectingVPN = false
b.state.ConnectingVPNUUID = ""
b.state.LastError = "VPN connection failed"
if b.state.VPNError == "" {
b.state.VPNError = "VPN connection failed"
}
b.state.VPNErrorUuid = connectingVPNUUID
b.stateMutex.Unlock()
// Clear cached PKCS11 PIN and SAML cookie
@@ -1258,8 +1217,6 @@ func (b *NetworkManagerBackend) UpdateVPNConfig(connUUID string, updates map[str
delete(ipv6, "dns")
}
mergeStoredSecrets(conn, settings)
if err := conn.Update(settings); err != nil {
return fmt.Errorf("failed to update connection: %w", err)
}
@@ -1354,8 +1311,6 @@ func (b *NetworkManagerBackend) SetVPNCredentials(connUUID string, username stri
delete(ipv6, "dns")
}
mergeStoredSecrets(conn, settings)
if err := conn.Update(settings); err != nil {
return fmt.Errorf("failed to update connection: %w", err)
}
@@ -225,14 +225,24 @@ func (b *NetworkManagerBackend) GetWiFiQRCodeContent(ssid string) (string, error
return "", fmt.Errorf("failed to identify security type of network `%s`", ssid)
}
var securityType string
switch keyMgmt {
case "none":
return "", fmt.Errorf("QR code generation only supports WPA-PSK connections, `%s` is open or WEP", ssid)
authAlg, _ := secSettings["auth-alg"].(string)
switch authAlg {
case "open":
securityType = "nopass"
default:
securityType = "WEP"
}
case "ieee8021x":
return "", fmt.Errorf("QR code generation only supports WPA-PSK connections, `%s` is enterprise", ssid)
case "wpa-psk", "sae", "wpa-psk-sae":
securityType = "WEP"
default:
return "", fmt.Errorf("QR code generation only supports WPA-PSK connections, `%s` uses %s", ssid, keyMgmt)
securityType = "WPA"
}
if securityType != "WPA" {
return "", fmt.Errorf("QR code generation only supports WPA connections, `%s` uses %s", ssid, securityType)
}
var psk string
@@ -266,7 +276,7 @@ func (b *NetworkManagerBackend) GetWiFiQRCodeContent(ssid string) (string, error
return "", fmt.Errorf("failed to retrieve password for `%s`", ssid)
}
return FormatWiFiQRString("WPA", ssid, psk), nil
return FormatWiFiQRString(securityType, ssid, psk), nil
}
func (b *NetworkManagerBackend) ConnectWiFi(req ConnectionRequest) error {
@@ -395,74 +405,6 @@ func (b *NetworkManagerBackend) ForgetWiFiNetwork(ssid string) error {
return nil
}
func getSavedWiFiProfiles(connections []gonetworkmanager.Connection) map[string]savedWiFiProfile {
profiles := make(map[string]savedWiFiProfile)
for _, conn := range connections {
connSettings, err := conn.GetSettings()
if err != nil {
continue
}
connMeta, ok := connSettings["connection"]
if !ok {
continue
}
connType, ok := connMeta["type"].(string)
if !ok || connType != "802-11-wireless" {
continue
}
wifiSettings, ok := connSettings["802-11-wireless"]
if !ok {
continue
}
ssidBytes, ok := wifiSettings["ssid"].([]byte)
if !ok || len(ssidBytes) == 0 {
continue
}
ssid := string(ssidBytes)
profile := savedWiFiProfile{
Autoconnect: true,
Mode: "infrastructure",
}
if ac, ok := connMeta["autoconnect"].(bool); ok {
profile.Autoconnect = ac
}
if hidden, ok := wifiSettings["hidden"].(bool); ok {
profile.Hidden = hidden
}
if mode, ok := wifiSettings["mode"].(string); ok && mode != "" {
profile.Mode = mode
}
if _, ok := connSettings["802-11-wireless-security"]; ok {
profile.Secured = true
}
if _, ok := connSettings["802-1x"]; ok {
profile.Enterprise = true
profile.Secured = true
}
if existing, ok := profiles[ssid]; ok {
profile.Autoconnect = profile.Autoconnect || existing.Autoconnect
profile.Hidden = profile.Hidden || existing.Hidden
profile.Secured = profile.Secured || existing.Secured
profile.Enterprise = profile.Enterprise || existing.Enterprise
if profile.Mode == "" {
profile.Mode = existing.Mode
}
}
profiles[ssid] = profile
}
return profiles
}
func (b *NetworkManagerBackend) IsConnectingTo(ssid string) bool {
b.stateMutex.RLock()
defer b.stateMutex.RUnlock()
@@ -500,7 +442,47 @@ func (b *NetworkManagerBackend) updateWiFiNetworks() ([]WiFiNetwork, error) {
return nil, fmt.Errorf("failed to get connections: %w", err)
}
savedProfiles := getSavedWiFiProfiles(connections)
savedSSIDs := make(map[string]bool)
autoconnectMap := make(map[string]bool)
hiddenSSIDs := make(map[string]bool)
for _, conn := range connections {
connSettings, err := conn.GetSettings()
if err != nil {
continue
}
connMeta, ok := connSettings["connection"]
if !ok {
continue
}
connType, ok := connMeta["type"].(string)
if !ok || connType != "802-11-wireless" {
continue
}
wifiSettings, ok := connSettings["802-11-wireless"]
if !ok {
continue
}
ssidBytes, ok := wifiSettings["ssid"].([]byte)
if !ok {
continue
}
ssid := string(ssidBytes)
savedSSIDs[ssid] = true
autoconnect := true
if ac, ok := connMeta["autoconnect"].(bool); ok {
autoconnect = ac
}
autoconnectMap[ssid] = autoconnect
if hidden, ok := wifiSettings["hidden"].(bool); ok && hidden {
hiddenSSIDs[ssid] = true
}
}
b.stateMutex.RLock()
currentSSID := b.state.WiFiSSID
@@ -509,8 +491,8 @@ func (b *NetworkManagerBackend) updateWiFiNetworks() ([]WiFiNetwork, error) {
wifiBSSID := b.state.WiFiBSSID
b.stateMutex.RUnlock()
seenSSIDs := make(map[string]int)
networks := make([]WiFiNetwork, 0, len(apPaths)+1)
seenSSIDs := make(map[string]*WiFiNetwork)
networks := []WiFiNetwork{}
for _, ap := range apPaths {
ssid, err := ap.GetPropertySSID()
@@ -518,8 +500,7 @@ func (b *NetworkManagerBackend) updateWiFiNetworks() ([]WiFiNetwork, error) {
continue
}
if existingIndex, exists := seenSSIDs[ssid]; exists {
existing := &networks[existingIndex]
if existing, exists := seenSSIDs[ssid]; exists {
strength, _ := ap.GetPropertyStrength()
if strength > existing.Signal {
existing.Signal = strength
@@ -569,7 +550,6 @@ func (b *NetworkManagerBackend) updateWiFiNetworks() ([]WiFiNetwork, error) {
}
}
profile, saved := savedProfiles[ssid]
network := WiFiNetwork{
SSID: ssid,
BSSID: bssid,
@@ -577,86 +557,45 @@ func (b *NetworkManagerBackend) updateWiFiNetworks() ([]WiFiNetwork, error) {
Secured: secured,
Enterprise: enterprise,
Connected: isConnected,
Saved: saved,
Autoconnect: profile.Autoconnect,
Hidden: profile.Hidden,
Saved: savedSSIDs[ssid],
Autoconnect: autoconnectMap[ssid],
Hidden: hiddenSSIDs[ssid],
Frequency: freq,
Mode: modeStr,
Rate: rate,
Channel: channel,
}
seenSSIDs[ssid] = &network
networks = append(networks, network)
seenSSIDs[ssid] = len(networks) - 1
}
if wifiConnected && currentSSID != "" {
if _, exists := seenSSIDs[currentSSID]; !exists {
profile, saved := savedProfiles[currentSSID]
hiddenNetwork := WiFiNetwork{
SSID: currentSSID,
BSSID: wifiBSSID,
Signal: wifiSignal,
Secured: true,
Connected: true,
Saved: saved,
Autoconnect: profile.Autoconnect,
Saved: savedSSIDs[currentSSID],
Autoconnect: autoconnectMap[currentSSID],
Hidden: true,
Mode: "infrastructure",
}
networks = append(networks, hiddenNetwork)
seenSSIDs[currentSSID] = len(networks) - 1
}
}
visibleNetworks := wiFiNetworksBySSID(networks, true)
savedNetworks := savedWiFiNetworksFromProfiles(savedProfiles, visibleNetworks, currentSSID, wifiConnected)
sortWiFiNetworks(networks)
b.stateMutex.Lock()
b.state.WiFiNetworks = networks
b.state.SavedWiFiNetworks = savedNetworks
b.stateMutex.Unlock()
return networks, nil
}
func (b *NetworkManagerBackend) updateSavedWiFiNetworks() error {
s := b.settings
if s == nil {
var err error
s, err = gonetworkmanager.NewSettings()
if err != nil {
return fmt.Errorf("failed to get settings: %w", err)
}
b.settings = s
}
settingsMgr := s.(gonetworkmanager.Settings)
connections, err := settingsMgr.ListConnections()
if err != nil {
return fmt.Errorf("failed to get connections: %w", err)
}
savedProfiles := getSavedWiFiProfiles(connections)
b.stateMutex.RLock()
currentSSID := b.state.WiFiSSID
wifiConnected := b.state.WiFiConnected
wifiNetworks := append([]WiFiNetwork(nil), b.state.WiFiNetworks...)
b.stateMutex.RUnlock()
wifiNetworks, savedNetworks := refreshSavedWiFiState(wifiNetworks, savedProfiles, currentSSID, wifiConnected)
b.stateMutex.Lock()
b.state.WiFiNetworks = wifiNetworks
b.state.SavedWiFiNetworks = savedNetworks
b.stateMutex.Unlock()
return nil
}
func (b *NetworkManagerBackend) findConnection(ssid string) (gonetworkmanager.Connection, error) {
s := b.settings
if s == nil {
@@ -956,8 +895,6 @@ func (b *NetworkManagerBackend) SetWiFiAutoconnect(ssid string, autoconnect bool
delete(ipv6, "dns")
}
mergeStoredSecrets(conn, settings)
err = conn.Update(settings)
if err != nil {
return fmt.Errorf("failed to update connection: %w", err)
@@ -1038,14 +975,49 @@ func (b *NetworkManagerBackend) updateAllWiFiDevices() {
return
}
savedProfiles := getSavedWiFiProfiles(connections)
savedSSIDs := make(map[string]bool)
autoconnectMap := make(map[string]bool)
hiddenSSIDs := make(map[string]bool)
for _, conn := range connections {
connSettings, err := conn.GetSettings()
if err != nil {
continue
}
connMeta, ok := connSettings["connection"]
if !ok {
continue
}
connType, ok := connMeta["type"].(string)
if !ok || connType != "802-11-wireless" {
continue
}
wifiSettings, ok := connSettings["802-11-wireless"]
if !ok {
continue
}
ssidBytes, ok := wifiSettings["ssid"].([]byte)
if !ok {
continue
}
ssid := string(ssidBytes)
savedSSIDs[ssid] = true
autoconnect := true
if ac, ok := connMeta["autoconnect"].(bool); ok {
autoconnect = ac
}
autoconnectMap[ssid] = autoconnect
if hidden, ok := wifiSettings["hidden"].(bool); ok && hidden {
hiddenSSIDs[ssid] = true
}
}
var devices []WiFiDevice
visibleNetworks := make(map[string]WiFiNetwork)
b.stateMutex.RLock()
currentSSID := b.state.WiFiSSID
wifiConnected := b.state.WiFiConnected
b.stateMutex.RUnlock()
for name, devInfo := range b.wifiDevices {
state, _ := devInfo.device.GetPropertyState()
@@ -1078,16 +1050,14 @@ func (b *NetworkManagerBackend) updateAllWiFiDevices() {
apPaths, err := devInfo.wireless.GetAccessPoints()
var networks []WiFiNetwork
if err == nil {
seenSSIDs := make(map[string]int)
networks = make([]WiFiNetwork, 0, len(apPaths)+1)
seenSSIDs := make(map[string]*WiFiNetwork)
for _, ap := range apPaths {
apSSID, err := ap.GetPropertySSID()
if err != nil || apSSID == "" {
continue
}
if existingIndex, exists := seenSSIDs[apSSID]; exists {
existing := &networks[existingIndex]
if existing, exists := seenSSIDs[apSSID]; exists {
strength, _ := ap.GetPropertyStrength()
if strength > existing.Signal {
existing.Signal = strength
@@ -1137,7 +1107,6 @@ func (b *NetworkManagerBackend) updateAllWiFiDevices() {
}
}
profile, saved := savedProfiles[apSSID]
network := WiFiNetwork{
SSID: apSSID,
BSSID: apBSSID,
@@ -1145,9 +1114,9 @@ func (b *NetworkManagerBackend) updateAllWiFiDevices() {
Secured: secured,
Enterprise: enterprise,
Connected: isConnected,
Saved: saved,
Autoconnect: profile.Autoconnect,
Hidden: profile.Hidden,
Saved: savedSSIDs[apSSID],
Autoconnect: autoconnectMap[apSSID],
Hidden: hiddenSSIDs[apSSID],
Frequency: freq,
Mode: modeStr,
Rate: rate,
@@ -1155,31 +1124,25 @@ func (b *NetworkManagerBackend) updateAllWiFiDevices() {
Device: name,
}
seenSSIDs[apSSID] = &network
networks = append(networks, network)
seenSSIDs[apSSID] = len(networks) - 1
if existing, ok := visibleNetworks[apSSID]; !ok || network.Signal > existing.Signal {
visibleNetworks[apSSID] = network
}
}
if connected && ssid != "" {
if _, exists := seenSSIDs[ssid]; !exists {
profile, saved := savedProfiles[ssid]
hiddenNetwork := WiFiNetwork{
SSID: ssid,
BSSID: bssid,
Signal: signal,
Secured: true,
Connected: true,
Saved: saved,
Autoconnect: profile.Autoconnect,
Saved: savedSSIDs[ssid],
Autoconnect: autoconnectMap[ssid],
Hidden: true,
Mode: "infrastructure",
Device: name,
}
networks = append(networks, hiddenNetwork)
seenSSIDs[ssid] = len(networks) - 1
visibleNetworks[ssid] = hiddenNetwork
}
}
@@ -1205,7 +1168,6 @@ func (b *NetworkManagerBackend) updateAllWiFiDevices() {
b.stateMutex.Lock()
b.state.WiFiDevices = devices
b.state.SavedWiFiNetworks = savedWiFiNetworksFromProfiles(savedProfiles, visibleNetworks, currentSSID, wifiConnected)
b.stateMutex.Unlock()
}
@@ -4,7 +4,6 @@ import (
"testing"
mock_gonetworkmanager "github.com/AvengeMedia/DankMaterialShell/core/internal/mocks/github.com/Wifx/gonetworkmanager/v2"
"github.com/Wifx/gonetworkmanager/v2"
"github.com/stretchr/testify/assert"
)
@@ -177,54 +176,6 @@ func TestNetworkManagerBackend_UpdateWiFiNetworks_NoDevice(t *testing.T) {
assert.Contains(t, err.Error(), "no WiFi device available")
}
func TestNetworkManagerBackend_UpdateSavedWiFiNetworksPreservesVisibleSavedNetworks(t *testing.T) {
mockNM := mock_gonetworkmanager.NewMockNetworkManager(t)
mockSettings := mock_gonetworkmanager.NewMockSettings(t)
mockConn := mock_gonetworkmanager.NewMockConnection(t)
backend, err := NewNetworkManagerBackend(mockNM)
assert.NoError(t, err)
backend.settings = mockSettings
backend.stateMutex.Lock()
backend.state.WiFiNetworks = []WiFiNetwork{
{
SSID: "Home",
Signal: 76,
},
}
backend.stateMutex.Unlock()
settings := gonetworkmanager.ConnectionSettings{
"connection": {
"type": "802-11-wireless",
"autoconnect": true,
},
"802-11-wireless": {
"ssid": []byte("Home"),
},
"802-11-wireless-security": {},
}
mockSettings.EXPECT().ListConnections().Return([]gonetworkmanager.Connection{mockConn}, nil)
mockConn.EXPECT().GetSettings().Return(settings, nil)
err = backend.updateSavedWiFiNetworks()
assert.NoError(t, err)
backend.stateMutex.RLock()
savedNetworks := append([]WiFiNetwork(nil), backend.state.SavedWiFiNetworks...)
wifiNetworks := append([]WiFiNetwork(nil), backend.state.WiFiNetworks...)
backend.stateMutex.RUnlock()
assert.Len(t, wifiNetworks, 1)
assert.True(t, wifiNetworks[0].Saved)
assert.Len(t, savedNetworks, 1)
assert.Equal(t, "Home", savedNetworks[0].SSID)
assert.True(t, savedNetworks[0].Saved)
assert.False(t, savedNetworks[0].OutOfRange)
assert.Equal(t, uint8(76), savedNetworks[0].Signal)
}
func TestNetworkManagerBackend_FindConnection_NoSettings(t *testing.T) {
mockNM := mock_gonetworkmanager.NewMockNetworkManager(t)
+4 -37
View File
@@ -1,7 +1,6 @@
package network
import (
"errors"
"fmt"
"sync"
"time"
@@ -11,10 +10,6 @@ import (
"github.com/yeqown/go-qrcode/writer/standard"
)
// ErrNoNetworkBackend is returned when no supported network management daemon
// (NetworkManager, iwd, systemd-networkd, ConnMan) is present on the system.
var ErrNoNetworkBackend = errors.New("no supported network backend found")
func NewManager() (*Manager, error) {
detection, err := DetectNetworkStack()
if err != nil {
@@ -63,16 +58,15 @@ func NewManager() (*Manager, error) {
}
default:
return nil, fmt.Errorf("%w: %s", ErrNoNetworkBackend, detection.ChosenReason)
return nil, fmt.Errorf("no supported network backend found: %s", detection.ChosenReason)
}
m := &Manager{
backend: backend,
state: &NetworkState{
NetworkStatus: StatusDisconnected,
Preference: PreferenceAuto,
WiFiNetworks: []WiFiNetwork{},
SavedWiFiNetworks: []WiFiNetwork{},
NetworkStatus: StatusDisconnected,
Preference: PreferenceAuto,
WiFiNetworks: []WiFiNetwork{},
},
stateMutex: sync.RWMutex{},
@@ -126,7 +120,6 @@ func (m *Manager) syncStateFromBackend() error {
m.state.WiFiBSSID = backendState.WiFiBSSID
m.state.WiFiSignal = backendState.WiFiSignal
m.state.WiFiNetworks = backendState.WiFiNetworks
m.state.SavedWiFiNetworks = backendState.SavedWiFiNetworks
m.state.WiFiDevices = backendState.WiFiDevices
m.state.WiredConnections = backendState.WiredConnections
m.state.VPNProfiles = backendState.VPNProfiles
@@ -135,8 +128,6 @@ func (m *Manager) syncStateFromBackend() error {
m.state.ConnectingSSID = backendState.ConnectingSSID
m.state.ConnectingDevice = backendState.ConnectingDevice
m.state.LastError = backendState.LastError
m.state.VPNError = backendState.VPNError
m.state.VPNErrorUuid = backendState.VPNErrorUuid
m.stateMutex.Unlock()
return nil
@@ -165,7 +156,6 @@ func (m *Manager) snapshotState() NetworkState {
defer m.stateMutex.RUnlock()
s := *m.state
s.WiFiNetworks = append([]WiFiNetwork(nil), m.state.WiFiNetworks...)
s.SavedWiFiNetworks = append([]WiFiNetwork(nil), m.state.SavedWiFiNetworks...)
s.WiFiDevices = append([]WiFiDevice(nil), m.state.WiFiDevices...)
s.WiredConnections = append([]WiredConnection(nil), m.state.WiredConnections...)
s.EthernetDevices = append([]EthernetDevice(nil), m.state.EthernetDevices...)
@@ -218,15 +208,9 @@ func stateChangedMeaningfully(old, new *NetworkState) bool {
if old.LastError != new.LastError {
return true
}
if old.VPNError != new.VPNError || old.VPNErrorUuid != new.VPNErrorUuid {
return true
}
if len(old.WiFiNetworks) != len(new.WiFiNetworks) {
return true
}
if len(old.SavedWiFiNetworks) != len(new.SavedWiFiNetworks) {
return true
}
if len(old.WiFiDevices) != len(new.WiFiDevices) {
return true
}
@@ -254,23 +238,6 @@ func stateChangedMeaningfully(old, new *NetworkState) bool {
}
}
for i := range old.SavedWiFiNetworks {
oldNet := &old.SavedWiFiNetworks[i]
newNet := &new.SavedWiFiNetworks[i]
if oldNet.SSID != newNet.SSID {
return true
}
if oldNet.Connected != newNet.Connected {
return true
}
if oldNet.Autoconnect != newNet.Autoconnect {
return true
}
if oldNet.OutOfRange != newNet.OutOfRange {
return true
}
}
for i := range old.WiredConnections {
oldNet := &old.WiredConnections[i]
newNet := &new.WiredConnections[i]
-4
View File
@@ -34,7 +34,6 @@ type WiFiNetwork struct {
Saved bool `json:"saved"`
Autoconnect bool `json:"autoconnect"`
Hidden bool `json:"hidden"`
OutOfRange bool `json:"outOfRange"`
Frequency uint32 `json:"frequency"`
Mode string `json:"mode"`
Rate uint32 `json:"rate"`
@@ -112,7 +111,6 @@ type NetworkState struct {
WiFiBSSID string `json:"wifiBSSID"`
WiFiSignal uint8 `json:"wifiSignal"`
WiFiNetworks []WiFiNetwork `json:"wifiNetworks"`
SavedWiFiNetworks []WiFiNetwork `json:"savedWifiNetworks"`
WiFiDevices []WiFiDevice `json:"wifiDevices"`
WiredConnections []WiredConnection `json:"wiredConnections"`
VPNProfiles []VPNProfile `json:"vpnProfiles"`
@@ -121,8 +119,6 @@ type NetworkState struct {
ConnectingSSID string `json:"connectingSSID"`
ConnectingDevice string `json:"connectingDevice,omitempty"`
LastError string `json:"lastError"`
VPNError string `json:"vpnError"`
VPNErrorUuid string `json:"vpnErrorUuid"`
}
type ConnectionRequest struct {
-103
View File
@@ -1,103 +0,0 @@
package network
import "sort"
type savedWiFiProfile struct {
Autoconnect bool
Hidden bool
Secured bool
Enterprise bool
Mode string
}
// Saved WiFi state is keyed by SSID because the UI/API accepts SSID actions.
// Multiple backend profiles for the same SSID are intentionally collapsed here.
func mergeSavedProfilesIntoWiFiNetworks(networks []WiFiNetwork, profiles map[string]savedWiFiProfile, currentSSID string, wifiConnected bool) []WiFiNetwork {
merged := make([]WiFiNetwork, len(networks))
for i, network := range networks {
profile, saved := profiles[network.SSID]
network.Connected = wifiConnected && network.SSID == currentSSID
network.Saved = saved
if saved {
network.Autoconnect = profile.Autoconnect
network.Hidden = network.Hidden || profile.Hidden
network.Secured = network.Secured || profile.Secured
network.Enterprise = network.Enterprise || profile.Enterprise
if network.Mode == "" {
network.Mode = profile.Mode
}
} else {
network.Autoconnect = false
}
merged[i] = network
}
return merged
}
func wiFiNetworksBySSID(networks []WiFiNetwork, visibleOnly bool) map[string]WiFiNetwork {
visible := make(map[string]WiFiNetwork, len(networks))
for _, network := range networks {
if visibleOnly && network.OutOfRange {
continue
}
visible[network.SSID] = network
}
return visible
}
func refreshSavedWiFiState(networks []WiFiNetwork, profiles map[string]savedWiFiProfile, currentSSID string, wifiConnected bool) ([]WiFiNetwork, []WiFiNetwork) {
mergedNetworks := mergeSavedProfilesIntoWiFiNetworks(networks, profiles, currentSSID, wifiConnected)
visibleNetworks := wiFiNetworksBySSID(mergedNetworks, true)
savedNetworks := savedWiFiNetworksFromProfiles(profiles, visibleNetworks, currentSSID, wifiConnected)
return mergedNetworks, savedNetworks
}
func savedWiFiNetworksFromProfiles(profiles map[string]savedWiFiProfile, visible map[string]WiFiNetwork, currentSSID string, wifiConnected bool) []WiFiNetwork {
networks := make([]WiFiNetwork, 0, len(profiles))
for ssid, profile := range profiles {
if network, ok := visible[ssid]; ok {
network.Saved = true
network.Autoconnect = profile.Autoconnect
network.Hidden = network.Hidden || profile.Hidden
network.Secured = network.Secured || profile.Secured
network.Enterprise = network.Enterprise || profile.Enterprise
network.OutOfRange = false
if network.Mode == "" {
network.Mode = profile.Mode
}
networks = append(networks, network)
continue
}
isConnected := wifiConnected && ssid == currentSSID
networks = append(networks, WiFiNetwork{
SSID: ssid,
Secured: profile.Secured,
Enterprise: profile.Enterprise,
Connected: isConnected,
Saved: true,
Autoconnect: profile.Autoconnect,
Hidden: profile.Hidden,
OutOfRange: !isConnected,
Mode: profile.Mode,
})
}
sort.Slice(networks, func(i, j int) bool {
if networks[i].Connected && !networks[j].Connected {
return true
}
if !networks[i].Connected && networks[j].Connected {
return false
}
if networks[i].OutOfRange != networks[j].OutOfRange {
return !networks[i].OutOfRange
}
if networks[i].Signal != networks[j].Signal {
return networks[i].Signal > networks[j].Signal
}
return networks[i].SSID < networks[j].SSID
})
return networks
}
@@ -1,170 +0,0 @@
package network
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestMergeSavedProfilesIntoWiFiNetworks(t *testing.T) {
networks := []WiFiNetwork{
{
SSID: "Home",
Signal: 80,
Secured: false,
Autoconnect: false,
},
{
SSID: "Cafe",
Signal: 50,
Secured: false,
Autoconnect: true,
},
}
profiles := map[string]savedWiFiProfile{
"Home": {
Autoconnect: true,
Hidden: true,
Secured: true,
Mode: "infrastructure",
},
}
merged := mergeSavedProfilesIntoWiFiNetworks(networks, profiles, "Home", true)
assert.Len(t, merged, 2)
assert.Equal(t, "Home", merged[0].SSID)
assert.True(t, merged[0].Connected)
assert.True(t, merged[0].Saved)
assert.True(t, merged[0].Autoconnect)
assert.True(t, merged[0].Hidden)
assert.True(t, merged[0].Secured)
assert.Equal(t, "infrastructure", merged[0].Mode)
assert.Equal(t, "Cafe", merged[1].SSID)
assert.False(t, merged[1].Saved)
assert.False(t, merged[1].Autoconnect)
}
func TestSavedWiFiNetworksFromProfilesOutOfRangeWithoutVisibleNetworks(t *testing.T) {
profiles := map[string]savedWiFiProfile{
"Home": {
Autoconnect: true,
Secured: true,
Mode: "infrastructure",
},
}
networks := savedWiFiNetworksFromProfiles(profiles, nil, "", false)
assert.Len(t, networks, 1)
assert.Equal(t, "Home", networks[0].SSID)
assert.True(t, networks[0].Saved)
assert.True(t, networks[0].OutOfRange)
assert.Equal(t, uint8(0), networks[0].Signal)
}
func TestSavedWiFiNetworksFromProfilesKeepsConnectedCurrentNetworkInRange(t *testing.T) {
profiles := map[string]savedWiFiProfile{
"Home": {
Autoconnect: true,
Secured: true,
},
}
networks := savedWiFiNetworksFromProfiles(profiles, nil, "Home", true)
assert.Len(t, networks, 1)
assert.Equal(t, "Home", networks[0].SSID)
assert.True(t, networks[0].Connected)
assert.False(t, networks[0].OutOfRange)
}
func TestSavedWiFiNetworksFromProfilesIncludesOutOfRange(t *testing.T) {
profiles := map[string]savedWiFiProfile{
"Home": {
Autoconnect: true,
Hidden: true,
Secured: true,
Mode: "infrastructure",
},
"Office": {
Autoconnect: false,
Secured: true,
Enterprise: true,
Mode: "infrastructure",
},
}
visible := map[string]WiFiNetwork{
"Home": {
SSID: "Home",
Signal: 72,
Secured: true,
Connected: true,
},
}
networks := savedWiFiNetworksFromProfiles(profiles, visible, "Home", true)
assert.Len(t, networks, 2)
assert.Equal(t, "Home", networks[0].SSID)
assert.True(t, networks[0].Saved)
assert.True(t, networks[0].Connected)
assert.False(t, networks[0].OutOfRange)
assert.True(t, networks[0].Hidden)
assert.Equal(t, uint8(72), networks[0].Signal)
assert.Equal(t, "Office", networks[1].SSID)
assert.True(t, networks[1].Saved)
assert.False(t, networks[1].Autoconnect)
assert.True(t, networks[1].Enterprise)
assert.True(t, networks[1].OutOfRange)
}
func TestWiFiNetworksBySSIDVisibleOnlySkipsOutOfRange(t *testing.T) {
visible := wiFiNetworksBySSID([]WiFiNetwork{
{SSID: "Home", Signal: 70},
{SSID: "Office", Signal: 0, OutOfRange: true},
}, true)
assert.Contains(t, visible, "Home")
assert.NotContains(t, visible, "Office")
}
func TestRefreshSavedWiFiStatePreservesVisibleSavedNetworks(t *testing.T) {
networks := []WiFiNetwork{
{
SSID: "Home",
Signal: 82,
},
}
profiles := map[string]savedWiFiProfile{
"Home": {
Autoconnect: true,
Secured: true,
Mode: "infrastructure",
},
"Office": {
Autoconnect: false,
Secured: true,
Mode: "infrastructure",
},
}
mergedNetworks, savedNetworks := refreshSavedWiFiState(networks, profiles, "", false)
assert.Len(t, mergedNetworks, 1)
assert.Equal(t, "Home", mergedNetworks[0].SSID)
assert.True(t, mergedNetworks[0].Saved)
assert.True(t, mergedNetworks[0].Autoconnect)
assert.Len(t, savedNetworks, 2)
assert.Equal(t, "Home", savedNetworks[0].SSID)
assert.True(t, savedNetworks[0].Saved)
assert.False(t, savedNetworks[0].OutOfRange)
assert.Equal(t, uint8(82), savedNetworks[0].Signal)
assert.Equal(t, "Office", savedNetworks[1].SSID)
assert.True(t, savedNetworks[1].Saved)
assert.True(t, savedNetworks[1].OutOfRange)
}
@@ -5,7 +5,6 @@ import (
"testing"
"github.com/AvengeMedia/DankMaterialShell/core/internal/mocks/net"
coreplugins "github.com/AvengeMedia/DankMaterialShell/core/internal/plugins"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/models"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
@@ -166,7 +165,6 @@ func TestPluginInfoJSON(t *testing.T) {
info := PluginInfo{
Name: "test",
Description: "test description",
Screenshot: "https://raw.githubusercontent.com/test/repo/main/screenshot.png",
Installed: true,
FirstParty: true,
}
@@ -179,59 +177,6 @@ func TestPluginInfoJSON(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, info.Name, unmarshaled.Name)
assert.Equal(t, info.Installed, unmarshaled.Installed)
assert.Equal(t, info.Screenshot, unmarshaled.Screenshot)
}
func TestNormalizeScreenshotURL(t *testing.T) {
tests := []struct {
name string
raw string
want string
}{
{
name: "raw github url is unchanged",
raw: "https://raw.githubusercontent.com/alcxyz/DankVault/main/docs/screenshot.png",
want: "https://raw.githubusercontent.com/alcxyz/DankVault/main/docs/screenshot.png",
},
{
name: "github blob url becomes raw content url",
raw: "https://github.com/acmagn/DMS-UPS-Monitor/blob/main/assets/screenshot.png",
want: "https://raw.githubusercontent.com/acmagn/DMS-UPS-Monitor/main/assets/screenshot.png",
},
{
name: "github raw url becomes raw content url",
raw: "https://github.com/antonjah/nix-monitor/raw/master/assets/scrot.png",
want: "https://raw.githubusercontent.com/antonjah/nix-monitor/master/assets/scrot.png",
},
{
name: "non github url is unchanged",
raw: "https://example.com/screenshot.png",
want: "https://example.com/screenshot.png",
},
{
name: "empty url is empty",
raw: " ",
want: "",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equal(t, tt.want, normalizeScreenshotURL(tt.raw))
})
}
}
func TestPluginInfoFromPluginIncludesScreenshot(t *testing.T) {
info := pluginInfoFromPlugin(coreplugins.Plugin{
ID: "dankVault",
Name: "Vault",
Repo: "https://github.com/AvengeMedia/dms-plugins",
Screenshot: "https://github.com/AvengeMedia/dms-plugins/blob/master/DankNotepadModule/screenshot.png",
})
assert.Equal(t, "https://raw.githubusercontent.com/AvengeMedia/dms-plugins/master/DankNotepadModule/screenshot.png", info.Screenshot)
assert.True(t, info.FirstParty)
}
func TestSuccessResult(t *testing.T) {
+17 -10
View File
@@ -3,6 +3,7 @@ package plugins
import (
"fmt"
"net"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/plugins"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/models"
@@ -27,19 +28,25 @@ func HandleList(conn net.Conn, req models.Request) {
return
}
feedback := plugins.FetchFeedback()
result := make([]PluginInfo, len(pluginList))
for i, p := range pluginList {
installed, _ := manager.IsInstalled(p)
fb := feedback[p.ID]
info := pluginInfoFromPlugin(p)
info.Installed = installed
info.Upvotes = fb.Upvotes
info.Status = fb.Status
info.IssueURL = fb.IssueURL
info.Similar = fb.Similar
result[i] = info
result[i] = PluginInfo{
ID: p.ID,
Name: p.Name,
Category: p.Category,
Author: p.Author,
Description: p.Description,
Repo: p.Repo,
Path: p.Path,
Capabilities: p.Capabilities,
Compositors: p.Compositors,
Dependencies: p.Dependencies,
Installed: installed,
FirstParty: strings.HasPrefix(p.Repo, "https://github.com/AvengeMedia"),
Featured: p.Featured,
RequiresDMS: p.RequiresDMS,
}
}
models.Respond(conn, req.ID, result)
+16 -3
View File
@@ -3,6 +3,7 @@ package plugins
import (
"fmt"
"net"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/plugins"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/models"
@@ -46,9 +47,21 @@ func HandleListInstalled(conn net.Conn, req models.Request) {
hasUpdate = hasUpdates
}
info := pluginInfoFromPlugin(plugin)
info.HasUpdate = hasUpdate
result = append(result, info)
result = append(result, PluginInfo{
ID: plugin.ID,
Name: plugin.Name,
Category: plugin.Category,
Author: plugin.Author,
Description: plugin.Description,
Repo: plugin.Repo,
Path: plugin.Path,
Capabilities: plugin.Capabilities,
Compositors: plugin.Compositors,
Dependencies: plugin.Dependencies,
FirstParty: strings.HasPrefix(plugin.Repo, "https://github.com/AvengeMedia"),
HasUpdate: hasUpdate,
RequiresDMS: plugin.RequiresDMS,
})
} else {
result = append(result, PluginInfo{
ID: id,
+16 -3
View File
@@ -3,6 +3,7 @@ package plugins
import (
"fmt"
"net"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/plugins"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/models"
@@ -52,9 +53,21 @@ func HandleSearch(conn net.Conn, req models.Request) {
result := make([]PluginInfo, len(searchResults))
for i, p := range searchResults {
installed, _ := manager.IsInstalled(p)
info := pluginInfoFromPlugin(p)
info.Installed = installed
result[i] = info
result[i] = PluginInfo{
ID: p.ID,
Name: p.Name,
Category: p.Category,
Author: p.Author,
Description: p.Description,
Repo: p.Repo,
Path: p.Path,
Capabilities: p.Capabilities,
Compositors: p.Compositors,
Dependencies: p.Dependencies,
Installed: installed,
FirstParty: strings.HasPrefix(p.Repo, "https://github.com/AvengeMedia"),
RequiresDMS: p.RequiresDMS,
}
}
models.Respond(conn, req.ID, result)
-5
View File
@@ -8,7 +8,6 @@ type PluginInfo struct {
Description string `json:"description,omitempty"`
Repo string `json:"repo,omitempty"`
Path string `json:"path,omitempty"`
Screenshot string `json:"screenshot,omitempty"`
Capabilities []string `json:"capabilities,omitempty"`
Compositors []string `json:"compositors,omitempty"`
Dependencies []string `json:"dependencies,omitempty"`
@@ -18,10 +17,6 @@ type PluginInfo struct {
Note string `json:"note,omitempty"`
HasUpdate bool `json:"hasUpdate,omitempty"`
RequiresDMS string `json:"requires_dms,omitempty"`
Upvotes int `json:"upvotes,omitempty"`
Status []string `json:"status,omitempty"`
IssueURL string `json:"issueUrl,omitempty"`
Similar []string `json:"similar,omitempty"`
}
type SuccessResult struct {
+2 -53
View File
@@ -1,65 +1,14 @@
package plugins
import (
"net/url"
"sort"
"strings"
coreplugins "github.com/AvengeMedia/DankMaterialShell/core/internal/plugins"
)
func pluginInfoFromPlugin(plugin coreplugins.Plugin) PluginInfo {
return PluginInfo{
ID: plugin.ID,
Name: plugin.Name,
Category: plugin.Category,
Author: plugin.Author,
Description: plugin.Description,
Repo: plugin.Repo,
Path: plugin.Path,
Screenshot: normalizeScreenshotURL(plugin.Screenshot),
Capabilities: plugin.Capabilities,
Compositors: plugin.Compositors,
Dependencies: plugin.Dependencies,
FirstParty: isFirstPartyRepo(plugin.Repo),
Featured: plugin.Featured,
RequiresDMS: plugin.RequiresDMS,
}
}
func isFirstPartyRepo(repo string) bool {
return strings.HasPrefix(repo, "https://github.com/AvengeMedia")
}
func normalizeScreenshotURL(raw string) string {
screenshotURL := strings.TrimSpace(raw)
if screenshotURL == "" {
return ""
}
parsed, err := url.Parse(screenshotURL)
if err != nil {
return screenshotURL
}
host := strings.ToLower(parsed.Host)
if host != "github.com" && host != "www.github.com" {
return screenshotURL
}
parts := strings.Split(strings.Trim(parsed.EscapedPath(), "/"), "/")
if len(parts) < 5 || (parts[2] != "blob" && parts[2] != "raw") {
return screenshotURL
}
rawParts := append([]string{parts[0], parts[1], parts[3]}, parts[4:]...)
return "https://raw.githubusercontent.com/" + strings.Join(rawParts, "/")
}
func SortPluginInfoByFirstParty(pluginInfos []PluginInfo) {
sort.SliceStable(pluginInfos, func(i, j int) bool {
isFirstPartyI := isFirstPartyRepo(pluginInfos[i].Repo)
isFirstPartyJ := isFirstPartyRepo(pluginInfos[j].Repo)
isFirstPartyI := strings.HasPrefix(pluginInfos[i].Repo, "https://github.com/AvengeMedia")
isFirstPartyJ := strings.HasPrefix(pluginInfos[j].Repo, "https://github.com/AvengeMedia")
if isFirstPartyI != isFirstPartyJ {
return isFirstPartyI
}
+10 -21
View File
@@ -3,7 +3,6 @@ package server
import (
"bufio"
"encoding/json"
"errors"
"fmt"
"net"
"os"
@@ -39,7 +38,7 @@ import (
"github.com/AvengeMedia/DankMaterialShell/core/pkg/syncmap"
)
const APIVersion = 26
const APIVersion = 25
var CLIVersion = "dev"
@@ -1482,36 +1481,26 @@ func Start(printDocs bool) error {
log.Info("")
go func() {
switch err := InitializeNetworkManager(); {
case err == nil:
notifyCapabilityChange()
return
case errors.Is(err, network.ErrNoNetworkBackend):
log.Warn("No supported network backend present; skipping retries")
return
default:
log.Warnf("Network manager unavailable, will retry: %v", err)
}
ticker := time.NewTicker(30 * time.Second)
defer ticker.Stop()
for range 10 {
<-ticker.C
if err := InitializeNetworkManager(); err != nil {
log.Warnf("Network manager unavailable: %v", err)
} else {
notifyCapabilityChange()
return
}
for range ticker.C {
if networkManager != nil {
return
}
switch err := InitializeNetworkManager(); {
case err == nil:
if err := InitializeNetworkManager(); err == nil {
log.Info("Network manager initialized")
notifyCapabilityChange()
return
case errors.Is(err, network.ErrNoNetworkBackend):
log.Warn("No supported network backend present; stopping retries")
return
}
}
log.Warn("Network manager still unavailable after retries; giving up")
}()
loginctlReady := make(chan struct{})
+5 -22
View File
@@ -131,9 +131,7 @@ func (m *Manager) SetInterval(seconds int) {
}
m.mu.Lock()
m.state.IntervalSeconds = seconds
m.state.NextCheckUnix = time.Now().Unix() + int64(seconds)
m.mu.Unlock()
m.wake()
m.markDirty()
}
@@ -184,12 +182,10 @@ func (m *Manager) Cancel() {
func (m *Manager) Acquire() {
atomic.AddInt32(&m.acquireCount, 1)
m.mu.Lock()
if m.state.NextCheckUnix == 0 {
m.state.NextCheckUnix = time.Now().Unix() + int64(m.state.IntervalSeconds)
select {
case m.wakeSched <- struct{}{}:
default:
}
m.mu.Unlock()
m.wake()
}
func (m *Manager) Release() {
@@ -198,13 +194,6 @@ func (m *Manager) Release() {
}
}
func (m *Manager) wake() {
select {
case m.wakeSched <- struct{}{}:
default:
}
}
func (m *Manager) scheduler() {
defer m.schedulerWG.Done()
for {
@@ -219,17 +208,11 @@ func (m *Manager) scheduler() {
m.mu.RLock()
interval := m.state.IntervalSeconds
next := m.state.NextCheckUnix
m.mu.RUnlock()
if interval < minIntervalSeconds {
interval = minIntervalSeconds
}
now := time.Now().Unix()
if next == 0 {
next = now + int64(interval)
}
wait := max(time.Duration(next-now)*time.Second, 0)
t := time.NewTimer(wait)
t := time.NewTimer(time.Duration(interval) * time.Second)
select {
case <-m.stopChan:
t.Stop()
@@ -296,13 +279,13 @@ func (m *Manager) runRefresh(parent context.Context) {
m.state.Packages = append(m.state.Packages, r.pkgs...)
}
m.state.Count = len(m.state.Packages)
m.state.NextCheckUnix = now + int64(m.state.IntervalSeconds)
if firstErr != nil {
m.state.Phase = PhaseError
m.state.Error = &ErrorInfo{Code: ErrCodeBackendFailed, Message: firstErr.Error()}
} else {
m.state.Phase = PhaseIdle
m.state.LastSuccessUnix = now
m.state.NextCheckUnix = now + int64(m.state.IntervalSeconds)
}
m.mu.Unlock()
m.markDirty()
+10 -11
View File
@@ -66,17 +66,16 @@ func convertPeerStatus(ps *ipnstate.PeerStatus, users map[tailcfg.UserID]tailcfg
}
peer := Peer{
ID: string(ps.ID),
Hostname: hostname,
DNSName: dnsName,
OS: ps.OS,
Online: ps.Online,
Active: ps.Active,
ExitNode: ps.ExitNode,
ExitNodeOption: ps.ExitNodeOption,
Relay: ps.Relay,
RxBytes: ps.RxBytes,
TxBytes: ps.TxBytes,
ID: string(ps.ID),
Hostname: hostname,
DNSName: dnsName,
OS: ps.OS,
Online: ps.Online,
Active: ps.Active,
ExitNode: ps.ExitNode,
Relay: ps.Relay,
RxBytes: ps.RxBytes,
TxBytes: ps.TxBytes,
}
for _, ip := range ps.TailscaleIPs {
@@ -14,14 +14,6 @@ func HandleRequest(conn net.Conn, req models.Request, manager *Manager) {
handleGetStatus(conn, req, manager)
case "tailscale.refresh":
handleRefresh(conn, req, manager)
case "tailscale.connect":
handleConnect(conn, req, manager)
case "tailscale.disconnect":
handleDisconnect(conn, req, manager)
case "tailscale.setExitNode":
handleSetExitNode(conn, req, manager)
case "tailscale.setAllowLanAccess":
handleSetAllowLanAccess(conn, req, manager)
default:
models.RespondError(conn, req.ID, fmt.Sprintf("unknown method: %s", req.Method))
}
@@ -36,37 +28,3 @@ func handleRefresh(conn net.Conn, req models.Request, manager *Manager) {
manager.RefreshState()
models.Respond(conn, req.ID, models.SuccessResult{Success: true, Message: "refreshed"})
}
func handleConnect(conn net.Conn, req models.Request, manager *Manager) {
if err := manager.Connect(); err != nil {
models.RespondError(conn, req.ID, err.Error())
return
}
models.Respond(conn, req.ID, models.SuccessResult{Success: true, Message: "connected"})
}
func handleDisconnect(conn net.Conn, req models.Request, manager *Manager) {
if err := manager.Disconnect(); err != nil {
models.RespondError(conn, req.ID, err.Error())
return
}
models.Respond(conn, req.ID, models.SuccessResult{Success: true, Message: "disconnected"})
}
func handleSetExitNode(conn net.Conn, req models.Request, manager *Manager) {
id := models.GetOr(req, "id", "")
if err := manager.SetExitNode(id); err != nil {
models.RespondError(conn, req.ID, err.Error())
return
}
models.Respond(conn, req.ID, models.SuccessResult{Success: true, Message: "exit node updated"})
}
func handleSetAllowLanAccess(conn net.Conn, req models.Request, manager *Manager) {
enabled := models.GetOr(req, "enabled", false)
if err := manager.SetAllowLANAccess(enabled); err != nil {
models.RespondError(conn, req.ID, err.Error())
return
}
models.Respond(conn, req.ID, models.SuccessResult{Success: true, Message: "lan access updated"})
}
@@ -4,7 +4,6 @@ import (
"bytes"
"context"
"encoding/json"
"fmt"
"net"
"testing"
"time"
@@ -79,63 +78,6 @@ func TestHandleRefresh(t *testing.T) {
assert.True(t, resp.Result.Success)
}
func TestHandleActions(t *testing.T) {
cases := []struct {
name string
method string
params map[string]any
}{
{"connect", "tailscale.connect", nil},
{"disconnect", "tailscale.disconnect", nil},
{"setExitNode", "tailscale.setExitNode", map[string]any{"id": "nABC123"}},
{"clearExitNode", "tailscale.setExitNode", map[string]any{"id": ""}},
{"setAllowLanAccess", "tailscale.setAllowLanAccess", map[string]any{"enabled": true}},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
m := handlerTestManager()
defer m.Close()
buf := &bytes.Buffer{}
conn := &mockConn{Buffer: buf}
req := models.Request{ID: 1, Method: tc.method, Params: tc.params}
HandleRequest(conn, req, m)
var resp models.Response[models.SuccessResult]
require.NoError(t, json.NewDecoder(buf).Decode(&resp))
assert.Equal(t, 1, resp.ID)
assert.Empty(t, resp.Error)
require.NotNil(t, resp.Result)
assert.True(t, resp.Result.Success)
})
}
}
func TestHandleAction_BackendError(t *testing.T) {
client := &mockClient{
watchFn: blockingWatch,
statusFn: func(ctx context.Context) (*ipnstate.Status, error) { return runningStatus(), nil },
editPrefsFn: func(ctx context.Context, mp *ipn.MaskedPrefs) (*ipn.Prefs, error) {
return nil, fmt.Errorf("backend rejected edit")
},
}
m := newManager(client)
defer m.Close()
buf := &bytes.Buffer{}
conn := &mockConn{Buffer: buf}
req := models.Request{ID: 1, Method: "tailscale.connect"}
HandleRequest(conn, req, m)
var resp models.Response[models.SuccessResult]
require.NoError(t, json.NewDecoder(buf).Decode(&resp))
assert.Nil(t, resp.Result)
assert.Contains(t, resp.Error, "backend rejected edit")
}
func TestHandleRequest_UnknownMethod(t *testing.T) {
m := handlerTestManager()
defer m.Close()
+4 -85
View File
@@ -11,7 +11,6 @@ import (
"tailscale.com/client/local"
"tailscale.com/ipn"
"tailscale.com/ipn/ipnstate"
"tailscale.com/tailcfg"
)
const (
@@ -23,8 +22,6 @@ const (
type tailscaleClient interface {
WatchIPNBus(ctx context.Context, mask ipn.NotifyWatchOpt) (ipnBusWatcher, error)
Status(ctx context.Context) (*ipnstate.Status, error)
GetPrefs(ctx context.Context) (*ipn.Prefs, error)
EditPrefs(ctx context.Context, mp *ipn.MaskedPrefs) (*ipn.Prefs, error)
}
// ipnBusWatcher abstracts the IPN bus watcher for testing.
@@ -46,14 +43,6 @@ func (w *localClientWrapper) Status(ctx context.Context) (*ipnstate.Status, erro
return w.client.Status(ctx)
}
func (w *localClientWrapper) GetPrefs(ctx context.Context) (*ipn.Prefs, error) {
return w.client.GetPrefs(ctx)
}
func (w *localClientWrapper) EditPrefs(ctx context.Context, mp *ipn.MaskedPrefs) (*ipn.Prefs, error) {
return w.client.EditPrefs(ctx, mp)
}
// Manager manages Tailscale state via IPN bus events and subscriber notifications.
type Manager struct {
state *TailscaleState
@@ -180,34 +169,14 @@ func (m *Manager) fetchAndBroadcast(ctx context.Context) {
statusCtx, cancel := context.WithTimeout(ctx, statusTimeout)
defer cancel()
state, err := m.fetchState(statusCtx)
status, err := m.client.Status(statusCtx)
if err != nil {
log.Warnf("[Tailscale] Failed to fetch status: %v", err)
return
}
m.updateState(state)
}
// fetchState fetches the current status and merges in pref-derived fields
// (e.g. exit-node LAN access) that are not present in the IPN status itself.
func (m *Manager) fetchState(ctx context.Context) (*TailscaleState, error) {
status, err := m.client.Status(ctx)
if err != nil {
return nil, err
}
state := convertStatus(status)
// Prefs carry the exit-node LAN-access toggle, which the status does not
// expose. Treat a prefs failure as non-fatal so status still updates.
if prefs, err := m.client.GetPrefs(ctx); err != nil {
log.Warnf("[Tailscale] Failed to fetch prefs: %v", err)
} else if prefs != nil {
state.ExitNodeAllowLANAccess = prefs.ExitNodeAllowLANAccess
}
return state, nil
m.updateState(state)
}
func (m *Manager) updateState(state *TailscaleState) {
@@ -297,62 +266,12 @@ func (m *Manager) RefreshState() {
ctx, cancel := context.WithTimeout(m.ctx, statusTimeout)
defer cancel()
state, err := m.fetchState(ctx)
status, err := m.client.Status(ctx)
if err != nil {
log.Warnf("[Tailscale] Failed to refresh state: %v", err)
return
}
state := convertStatus(status)
m.updateState(state)
}
// Connect brings the Tailscale backend up (WantRunning = true).
func (m *Manager) Connect() error {
return m.editPrefs(&ipn.MaskedPrefs{
Prefs: ipn.Prefs{WantRunning: true},
WantRunningSet: true,
})
}
// Disconnect brings the Tailscale backend down (WantRunning = false).
func (m *Manager) Disconnect() error {
return m.editPrefs(&ipn.MaskedPrefs{
Prefs: ipn.Prefs{WantRunning: false},
WantRunningSet: true,
})
}
// SetExitNode selects the exit node identified by its stable node ID. An empty
// id clears the current exit node. Mirrors `tailscale set --exit-node=<id>`,
// which also clears any legacy IP-based exit node so a stale ExitNodeIP cannot
// silently take precedence over the now-empty ID.
func (m *Manager) SetExitNode(id string) error {
return m.editPrefs(&ipn.MaskedPrefs{
Prefs: ipn.Prefs{ExitNodeID: tailcfg.StableNodeID(id)},
ExitNodeIDSet: true,
ExitNodeIPSet: true,
})
}
// SetAllowLANAccess toggles whether locally accessible subnets remain
// reachable while an exit node is in use.
func (m *Manager) SetAllowLANAccess(enabled bool) error {
return m.editPrefs(&ipn.MaskedPrefs{
Prefs: ipn.Prefs{ExitNodeAllowLANAccess: enabled},
ExitNodeAllowLANAccessSet: true,
})
}
// editPrefs applies a masked prefs edit and refreshes state so subscribers see
// the result immediately, in addition to the IPN bus notification it triggers.
func (m *Manager) editPrefs(mp *ipn.MaskedPrefs) error {
ctx, cancel := context.WithTimeout(m.ctx, statusTimeout)
defer cancel()
if _, err := m.client.EditPrefs(ctx, mp); err != nil {
return err
}
m.RefreshState()
return nil
}
+2 -101
View File
@@ -12,16 +12,8 @@ import (
"github.com/stretchr/testify/require"
"tailscale.com/ipn"
"tailscale.com/ipn/ipnstate"
"tailscale.com/tailcfg"
)
// blockingWatch is a watchFn that blocks until the context is cancelled, used
// by tests that exercise direct manager calls rather than the watch loop.
func blockingWatch(ctx context.Context, mask ipn.NotifyWatchOpt) (ipnBusWatcher, error) {
<-ctx.Done()
return nil, ctx.Err()
}
// mockWatcher yields canned Notify events, then returns err or blocks until Close/context cancel.
type mockWatcher struct {
events []ipn.Notify
@@ -76,10 +68,8 @@ func (w *mockWatcher) Close() error {
// mockClient implements tailscaleClient for testing.
type mockClient struct {
watchFn func(ctx context.Context, mask ipn.NotifyWatchOpt) (ipnBusWatcher, error)
statusFn func(ctx context.Context) (*ipnstate.Status, error)
getPrefsFn func(ctx context.Context) (*ipn.Prefs, error)
editPrefsFn func(ctx context.Context, mp *ipn.MaskedPrefs) (*ipn.Prefs, error)
watchFn func(ctx context.Context, mask ipn.NotifyWatchOpt) (ipnBusWatcher, error)
statusFn func(ctx context.Context) (*ipnstate.Status, error)
}
func (c *mockClient) WatchIPNBus(ctx context.Context, mask ipn.NotifyWatchOpt) (ipnBusWatcher, error) {
@@ -90,20 +80,6 @@ func (c *mockClient) Status(ctx context.Context) (*ipnstate.Status, error) {
return c.statusFn(ctx)
}
func (c *mockClient) GetPrefs(ctx context.Context) (*ipn.Prefs, error) {
if c.getPrefsFn != nil {
return c.getPrefsFn(ctx)
}
return &ipn.Prefs{}, nil
}
func (c *mockClient) EditPrefs(ctx context.Context, mp *ipn.MaskedPrefs) (*ipn.Prefs, error) {
if c.editPrefsFn != nil {
return c.editPrefsFn(ctx, mp)
}
return &ipn.Prefs{}, nil
}
func runningStatus() *ipnstate.Status {
return &ipnstate.Status{
Version: "1.94.2",
@@ -320,78 +296,3 @@ func TestManager_RefreshState(t *testing.T) {
assert.True(t, state.Connected)
assert.Equal(t, "cachyos", state.Self.Hostname)
}
func TestManager_RefreshState_MergesPrefs(t *testing.T) {
client := &mockClient{
watchFn: blockingWatch,
statusFn: func(ctx context.Context) (*ipnstate.Status, error) { return runningStatus(), nil },
getPrefsFn: func(ctx context.Context) (*ipn.Prefs, error) {
return &ipn.Prefs{ExitNodeAllowLANAccess: true}, nil
},
}
m := newManager(client)
defer m.Close()
m.RefreshState()
assert.True(t, m.GetState().ExitNodeAllowLANAccess)
}
func TestManager_Actions_EditPrefs(t *testing.T) {
var captured *ipn.MaskedPrefs
client := &mockClient{
watchFn: blockingWatch,
statusFn: func(ctx context.Context) (*ipnstate.Status, error) { return runningStatus(), nil },
editPrefsFn: func(ctx context.Context, mp *ipn.MaskedPrefs) (*ipn.Prefs, error) {
captured = mp
return &ipn.Prefs{}, nil
},
}
m := newManager(client)
defer m.Close()
require.NoError(t, m.Connect())
require.NotNil(t, captured)
assert.True(t, captured.WantRunningSet)
assert.True(t, captured.WantRunning)
require.NoError(t, m.Disconnect())
assert.True(t, captured.WantRunningSet)
assert.False(t, captured.WantRunning)
require.NoError(t, m.SetExitNode("nABC123"))
assert.True(t, captured.ExitNodeIDSet)
assert.Equal(t, tailcfg.StableNodeID("nABC123"), captured.ExitNodeID)
// ExitNodeIPSet must also be set so a stale legacy ExitNodeIP cannot
// override the ID-based selection (mirrors `tailscale set --exit-node`).
assert.True(t, captured.ExitNodeIPSet)
require.NoError(t, m.SetExitNode(""))
assert.True(t, captured.ExitNodeIDSet)
assert.Equal(t, tailcfg.StableNodeID(""), captured.ExitNodeID)
// Clearing must zero both the ID and any legacy IP-based exit node.
assert.True(t, captured.ExitNodeIPSet)
require.NoError(t, m.SetAllowLANAccess(true))
assert.True(t, captured.ExitNodeAllowLANAccessSet)
assert.True(t, captured.ExitNodeAllowLANAccess)
}
func TestManager_Actions_PropagateError(t *testing.T) {
client := &mockClient{
watchFn: blockingWatch,
statusFn: func(ctx context.Context) (*ipnstate.Status, error) { return runningStatus(), nil },
editPrefsFn: func(ctx context.Context, mp *ipn.MaskedPrefs) (*ipn.Prefs, error) {
return nil, fmt.Errorf("backend rejected edit")
},
}
m := newManager(client)
defer m.Close()
assert.Error(t, m.Connect())
assert.Error(t, m.SetExitNode("nABC123"))
assert.Error(t, m.SetAllowLANAccess(true))
}
+22 -24
View File
@@ -2,32 +2,30 @@ package tailscale
// TailscaleState represents the current state of the Tailscale daemon.
type TailscaleState struct {
Connected bool `json:"connected"`
Version string `json:"version"`
BackendState string `json:"backendState"`
MagicDNSSuffix string `json:"magicDnsSuffix"`
TailnetName string `json:"tailnetName"`
ExitNodeAllowLANAccess bool `json:"exitNodeAllowLanAccess"`
Self Peer `json:"self"`
Peers []Peer `json:"peers"`
Connected bool `json:"connected"`
Version string `json:"version"`
BackendState string `json:"backendState"`
MagicDNSSuffix string `json:"magicDnsSuffix"`
TailnetName string `json:"tailnetName"`
Self Peer `json:"self"`
Peers []Peer `json:"peers"`
}
// Peer represents a single node in the Tailscale network.
type Peer struct {
ID string `json:"id"`
Hostname string `json:"hostname"`
DNSName string `json:"dnsName"`
TailscaleIP string `json:"tailscaleIp"`
TailscaleIPv6 string `json:"tailscaleIpv6,omitempty"`
OS string `json:"os"`
Online bool `json:"online"`
LastSeen string `json:"lastSeen,omitempty"`
ExitNode bool `json:"exitNode"`
ExitNodeOption bool `json:"exitNodeOption"`
Tags []string `json:"tags,omitempty"`
Owner string `json:"owner"`
Relay string `json:"relay,omitempty"`
Active bool `json:"active"`
RxBytes int64 `json:"rxBytes"`
TxBytes int64 `json:"txBytes"`
ID string `json:"id"`
Hostname string `json:"hostname"`
DNSName string `json:"dnsName"`
TailscaleIP string `json:"tailscaleIp"`
TailscaleIPv6 string `json:"tailscaleIpv6,omitempty"`
OS string `json:"os"`
Online bool `json:"online"`
LastSeen string `json:"lastSeen,omitempty"`
ExitNode bool `json:"exitNode"`
Tags []string `json:"tags,omitempty"`
Owner string `json:"owner"`
Relay string `json:"relay,omitempty"`
Active bool `json:"active"`
RxBytes int64 `json:"rxBytes"`
TxBytes int64 `json:"txBytes"`
}
+2 -2
View File
@@ -1,8 +1,8 @@
package utils
import "cmp"
import "golang.org/x/exp/constraints"
func Clamp[T cmp.Ordered](val, min, max T) T {
func Clamp[T constraints.Ordered](val, min, max T) T {
if val < min {
return min
}
-1
View File
@@ -73,7 +73,6 @@ override_dh_auto_install:
cp -r quickshell/* debian/dms-git/usr/share/quickshell/dms/; \
install -Dm644 assets/systemd/dms.service debian/dms-git/usr/lib/systemd/user/dms.service; \
install -Dm644 assets/dms-open.desktop debian/dms-git/usr/share/applications/dms-open.desktop; \
install -Dm644 assets/com.danklinux.dms.desktop debian/dms-git/usr/share/applications/com.danklinux.dms.desktop; \
install -Dm644 assets/danklogo.svg debian/dms-git/usr/share/icons/hicolor/scalable/apps/danklogo.svg; \
else \
echo "ERROR: quickshell directory not found!" && \
-1
View File
@@ -66,7 +66,6 @@ override_dh_auto_install:
cp -r DankMaterialShell-$(UPSTREAM_VERSION)/quickshell/* debian/dms/usr/share/quickshell/dms/; \
install -Dm644 DankMaterialShell-$(UPSTREAM_VERSION)/assets/systemd/dms.service debian/dms/usr/lib/systemd/user/dms.service; \
install -Dm644 DankMaterialShell-$(UPSTREAM_VERSION)/assets/dms-open.desktop debian/dms/usr/share/applications/dms-open.desktop; \
install -Dm644 DankMaterialShell-$(UPSTREAM_VERSION)/assets/com.danklinux.dms.desktop debian/dms/usr/share/applications/com.danklinux.dms.desktop; \
install -Dm644 DankMaterialShell-$(UPSTREAM_VERSION)/assets/danklogo.svg debian/dms/usr/share/icons/hicolor/scalable/apps/danklogo.svg; \
else \
echo "ERROR: DankMaterialShell-$(UPSTREAM_VERSION) directory not found!" && \
-2
View File
@@ -121,7 +121,6 @@ core/bin/${DMS_BINARY} completion fish > %{buildroot}%{_datadir}/fish/vendor_com
install -Dm644 assets/systemd/dms.service %{buildroot}%{_userunitdir}/dms.service
install -Dm644 assets/dms-open.desktop %{buildroot}%{_datadir}/applications/dms-open.desktop
install -Dm644 assets/com.danklinux.dms.desktop %{buildroot}%{_datadir}/applications/com.danklinux.dms.desktop
install -Dm644 assets/danklogo.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/danklogo.svg
# Install shell files to shared data location
@@ -145,7 +144,6 @@ pkill -USR1 -x dms >/dev/null 2>&1 || :
%{_datadir}/quickshell/dms/
%{_userunitdir}/dms.service
%{_datadir}/applications/dms-open.desktop
%{_datadir}/applications/com.danklinux.dms.desktop
%{_datadir}/icons/hicolor/scalable/apps/danklogo.svg
%files -n dms-cli
-2
View File
@@ -89,7 +89,6 @@ install -d %{buildroot}%{_datadir}/fish/vendor_completions.d
install -Dm644 %{_builddir}/dms-qml/assets/systemd/dms.service %{buildroot}%{_userunitdir}/dms.service
install -Dm644 %{_builddir}/dms-qml/assets/dms-open.desktop %{buildroot}%{_datadir}/applications/dms-open.desktop
install -Dm644 %{_builddir}/dms-qml/assets/com.danklinux.dms.desktop %{buildroot}%{_datadir}/applications/com.danklinux.dms.desktop
install -Dm644 %{_builddir}/dms-qml/assets/danklogo.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/danklogo.svg
install -dm755 %{buildroot}%{_datadir}/quickshell/dms
@@ -112,7 +111,6 @@ pkill -USR1 -x dms >/dev/null 2>&1 || :
%{_datadir}/quickshell/dms/
%{_userunitdir}/dms.service
%{_datadir}/applications/dms-open.desktop
%{_datadir}/applications/com.danklinux.dms.desktop
%{_datadir}/icons/hicolor/scalable/apps/danklogo.svg
%files -n dms-cli
-2
View File
@@ -116,7 +116,6 @@ install -d %{buildroot}%{_datadir}/fish/vendor_completions.d
install -Dm644 assets/systemd/dms.service %{buildroot}%{_userunitdir}/dms.service
install -Dm644 assets/dms-open.desktop %{buildroot}%{_datadir}/applications/dms-open.desktop
install -Dm644 assets/com.danklinux.dms.desktop %{buildroot}%{_datadir}/applications/com.danklinux.dms.desktop
install -Dm644 assets/danklogo.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/danklogo.svg
install -dm755 %{buildroot}%{_datadir}/quickshell/dms
@@ -152,7 +151,6 @@ pkill -USR1 -x dms >/dev/null 2>&1 || :
%{_datadir}/quickshell/dms/
%{_userunitdir}/dms.service
%{_datadir}/applications/dms-open.desktop
%{_datadir}/applications/com.danklinux.dms.desktop
%dir %{_datadir}/icons/hicolor
%dir %{_datadir}/icons/hicolor/scalable
%dir %{_datadir}/icons/hicolor/scalable/apps

Some files were not shown because too many files have changed in this diff Show More