cmd/hakurei/print: serialise array for ps
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Test / Create distribution (push) Successful in 35s
				
			
		
			
				
	
				Test / Sandbox (push) Successful in 40s
				
			
		
			
				
	
				Test / Sandbox (race detector) (push) Successful in 42s
				
			
		
			
				
	
				Test / Hakurei (push) Successful in 2m25s
				
			
		
			
				
	
				Test / Hakurei (race detector) (push) Successful in 3m7s
				
			
		
			
				
	
				Test / Hpkg (push) Successful in 3m13s
				
			
		
			
				
	
				Test / Flake checks (push) Successful in 1m27s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Test / Create distribution (push) Successful in 35s
				
			Test / Sandbox (push) Successful in 40s
				
			Test / Sandbox (race detector) (push) Successful in 42s
				
			Test / Hakurei (push) Successful in 2m25s
				
			Test / Hakurei (race detector) (push) Successful in 3m7s
				
			Test / Hpkg (push) Successful in 3m13s
				
			Test / Flake checks (push) Successful in 1m27s
				
			Wanted to do this for a long time, since the key is redundant. This also makes it easier to migrate to the new store interface. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
		
							parent
							
								
									23ae7822bf
								
							
						
					
					
						commit
						0e5ca74b98
					
				@ -1,9 +1,11 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
 | 
						"maps"
 | 
				
			||||||
	"slices"
 | 
						"slices"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
@ -177,10 +179,8 @@ func printPs(output io.Writer, now time.Time, s store.Compat, short, flagJSON bo
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !short && flagJSON {
 | 
						if !short && flagJSON {
 | 
				
			||||||
		es := make(map[string]*hst.State, len(entries))
 | 
							es := slices.Collect(maps.Values(entries))
 | 
				
			||||||
		for id, instance := range entries {
 | 
							slices.SortFunc(es, func(a, b *hst.State) int { return bytes.Compare(a.ID[:], b.ID[:]) })
 | 
				
			||||||
			es[id.String()] = instance
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		encodeJSON(log.Fatal, output, short, es)
 | 
							encodeJSON(log.Fatal, output, short, es)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,12 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"hakurei.app/container/check"
 | 
				
			||||||
	"hakurei.app/hst"
 | 
						"hakurei.app/hst"
 | 
				
			||||||
	"hakurei.app/internal/store"
 | 
						"hakurei.app/internal/store"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -530,8 +532,25 @@ func TestPrintPs(t *testing.T) {
 | 
				
			|||||||
    4cf073bd    3405691582    9 (org.chromium.Chromium)    1h2m32s
 | 
					    4cf073bd    3405691582    9 (org.chromium.Chromium)    1h2m32s
 | 
				
			||||||
`},
 | 
					`},
 | 
				
			||||||
		{"valid short", map[hst.ID]*hst.State{testID: testState}, true, false, "4cf073bd\n"},
 | 
							{"valid short", map[hst.ID]*hst.State{testID: testState}, true, false, "4cf073bd\n"},
 | 
				
			||||||
		{"valid json", map[hst.ID]*hst.State{testID: testState}, false, true, `{
 | 
							{"valid json", map[hst.ID]*hst.State{testID: testState, (hst.ID)(bytes.Repeat([]byte{0xaa}, len(hst.ID{}))): {
 | 
				
			||||||
  "8e2c76b066dabe574cf073bdb46eb5c1": {
 | 
								ID:      (hst.ID)(bytes.Repeat([]byte{0xaa}, len(hst.ID{}))),
 | 
				
			||||||
 | 
								PID:     0xbeef,
 | 
				
			||||||
 | 
								ShimPID: 0xcafe,
 | 
				
			||||||
 | 
								Config: &hst.Config{
 | 
				
			||||||
 | 
									ID:          "uk.gensokyo.cat",
 | 
				
			||||||
 | 
									Enablements: hst.NewEnablements(hst.EWayland | hst.EPulse),
 | 
				
			||||||
 | 
									Identity:    1,
 | 
				
			||||||
 | 
									Container: &hst.ContainerConfig{
 | 
				
			||||||
 | 
										Shell: check.MustAbs("/bin/sh"),
 | 
				
			||||||
 | 
										Home:  check.MustAbs("/data/data/uk.gensokyo.cat"),
 | 
				
			||||||
 | 
										Path:  check.MustAbs("/usr/bin/cat"),
 | 
				
			||||||
 | 
										Args:  []string{"cat"},
 | 
				
			||||||
 | 
										Flags: hst.FUserns,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								Time: time.Unix(0, 0xdeadbeef).UTC(),
 | 
				
			||||||
 | 
							}}, false, true, `[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
    "instance": "8e2c76b066dabe574cf073bdb46eb5c1",
 | 
					    "instance": "8e2c76b066dabe574cf073bdb46eb5c1",
 | 
				
			||||||
    "pid": 3405691582,
 | 
					    "pid": 3405691582,
 | 
				
			||||||
    "shim_pid": 3735928559,
 | 
					    "shim_pid": 3735928559,
 | 
				
			||||||
@ -683,8 +702,33 @@ func TestPrintPs(t *testing.T) {
 | 
				
			|||||||
      "share_tmpdir": true
 | 
					      "share_tmpdir": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "time": "1970-01-01T00:00:00.000000009Z"
 | 
					    "time": "1970-01-01T00:00:00.000000009Z"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "instance": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
 | 
				
			||||||
 | 
					    "pid": 48879,
 | 
				
			||||||
 | 
					    "shim_pid": 51966,
 | 
				
			||||||
 | 
					    "id": "uk.gensokyo.cat",
 | 
				
			||||||
 | 
					    "enablements": {
 | 
				
			||||||
 | 
					      "wayland": true,
 | 
				
			||||||
 | 
					      "pulse": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "identity": 1,
 | 
				
			||||||
 | 
					    "groups": null,
 | 
				
			||||||
 | 
					    "container": {
 | 
				
			||||||
 | 
					      "env": null,
 | 
				
			||||||
 | 
					      "filesystem": null,
 | 
				
			||||||
 | 
					      "shell": "/bin/sh",
 | 
				
			||||||
 | 
					      "home": "/data/data/uk.gensokyo.cat",
 | 
				
			||||||
 | 
					      "path": "/usr/bin/cat",
 | 
				
			||||||
 | 
					      "args": [
 | 
				
			||||||
 | 
					        "cat"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "userns": true,
 | 
				
			||||||
 | 
					      "map_real_uid": false
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "time": "1970-01-01T00:00:03.735928559Z"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					]
 | 
				
			||||||
`},
 | 
					`},
 | 
				
			||||||
		{"valid short json", map[hst.ID]*hst.State{testID: testState}, true, true, `["8e2c76b066dabe574cf073bdb46eb5c1"]
 | 
							{"valid short json", map[hst.ID]*hst.State{testID: testState}, true, true, `["8e2c76b066dabe574cf073bdb46eb5c1"]
 | 
				
			||||||
`},
 | 
					`},
 | 
				
			||||||
 | 
				
			|||||||
@ -58,7 +58,7 @@ def check_state(name, enablements):
 | 
				
			|||||||
    instances = json.loads(machine.succeed("sudo -u alice -i XDG_RUNTIME_DIR=/run/user/1000 hakurei --json ps"))
 | 
					    instances = json.loads(machine.succeed("sudo -u alice -i XDG_RUNTIME_DIR=/run/user/1000 hakurei --json ps"))
 | 
				
			||||||
    if len(instances) != 1:
 | 
					    if len(instances) != 1:
 | 
				
			||||||
        raise Exception(f"unexpected state length {len(instances)}")
 | 
					        raise Exception(f"unexpected state length {len(instances)}")
 | 
				
			||||||
    instance = next(iter(instances.values()))
 | 
					    instance = instances[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if len(instance['container']['args']) != 1 or not (instance['container']['args'][0].startswith("/nix/store/")) or f"hakurei-{name}-" not in (instance['container']['args'][0]):
 | 
					    if len(instance['container']['args']) != 1 or not (instance['container']['args'][0].startswith("/nix/store/")) or f"hakurei-{name}-" not in (instance['container']['args'][0]):
 | 
				
			||||||
        raise Exception(f"unexpected args {instance['container']['args']}")
 | 
					        raise Exception(f"unexpected args {instance['container']['args']}")
 | 
				
			||||||
 | 
				
			|||||||
@ -84,14 +84,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  virtualisation = {
 | 
					  virtualisation = {
 | 
				
			||||||
    # Hopefully reduces spurious test failures:
 | 
					    # Hopefully reduces spurious test failures:
 | 
				
			||||||
    memorySize = 4096;
 | 
					    memorySize = 8192;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    qemu.options = [
 | 
					    qemu.options = [
 | 
				
			||||||
      # Need to switch to a different GPU driver than the default one (-vga std) so that Sway can launch:
 | 
					      # Need to switch to a different GPU driver than the default one (-vga std) so that Sway can launch:
 | 
				
			||||||
      "-vga none -device virtio-gpu-pci"
 | 
					      "-vga none -device virtio-gpu-pci"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Increase Go test compiler performance:
 | 
					      # Increase Go test compiler performance:
 | 
				
			||||||
      "-smp 8"
 | 
					      "-smp 16"
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -56,7 +56,7 @@ def check_state(name, enablements):
 | 
				
			|||||||
    instances = json.loads(machine.succeed("sudo -u alice -i XDG_RUNTIME_DIR=/run/user/1000 hakurei --json ps"))
 | 
					    instances = json.loads(machine.succeed("sudo -u alice -i XDG_RUNTIME_DIR=/run/user/1000 hakurei --json ps"))
 | 
				
			||||||
    if len(instances) != 1:
 | 
					    if len(instances) != 1:
 | 
				
			||||||
        raise Exception(f"unexpected state length {len(instances)}")
 | 
					        raise Exception(f"unexpected state length {len(instances)}")
 | 
				
			||||||
    instance = next(iter(instances.values()))
 | 
					    instance = instances[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    command = f"{name}-start"
 | 
					    command = f"{name}-start"
 | 
				
			||||||
    if not (instance['container']['path'].startswith("/nix/store/")) or not (instance['container']['path'].endswith(command)):
 | 
					    if not (instance['container']['path'].startswith("/nix/store/")) or not (instance['container']['path'].endswith(command)):
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user