blob: eb3f00382ef3bf3d39ba9d7065283f3a63fddbb5 [file] [log] [blame]
Lorenz Brunfc5dbc62020-05-28 12:18:07 +02001// Copyright 2020 The Monogon Project Authors.
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
17package main
18
19import (
20 "context"
Lorenz Brun52f7f292020-06-24 16:42:02 +020021 "log"
Lorenz Brunfc5dbc62020-05-28 12:18:07 +020022 "os"
Tim Windelschmidtb765f242024-05-08 01:40:02 +020023 "os/signal"
Serge Bazanski2b6dc312024-06-04 17:44:55 +020024 "path/filepath"
Lorenz Brunfc5dbc62020-05-28 12:18:07 +020025
Serge Bazanski0ed2f962021-03-15 16:39:30 +010026 apb "source.monogon.dev/metropolis/proto/api"
Tim Windelschmidt9f21f532024-05-07 15:14:20 +020027
28 mlaunch "source.monogon.dev/metropolis/test/launch"
29 "source.monogon.dev/osbase/test/launch"
Lorenz Brunfc5dbc62020-05-28 12:18:07 +020030)
31
32func main() {
Mateusz Zalega0246f5e2022-04-22 17:29:04 +020033 // Create the launch directory.
34 ld, err := os.MkdirTemp(os.Getenv("TEST_TMPDIR"), "node_state*")
35 if err != nil {
36 log.Fatalf("couldn't create a launch directory: %v", err)
37 }
38 defer os.RemoveAll(ld)
39 // Create the socket directory. Since using TEST_TMPDIR will often result in
40 // paths too long to place UNIX sockets at, we'll use the LSB temporary
41 // directory.
42 sd, err := os.MkdirTemp("/tmp", "node_sock*")
43 if err != nil {
44 log.Fatalf("couldn't create a socket directory: %v", err)
45 }
46 defer os.RemoveAll(sd)
47
Serge Bazanskibe742842022-04-04 13:18:50 +020048 var ports []uint16
Tim Windelschmidt9f21f532024-05-07 15:14:20 +020049 for _, p := range mlaunch.NodePorts {
Serge Bazanskibe742842022-04-04 13:18:50 +020050 ports = append(ports, uint16(p))
51 }
Tim Windelschmidtb765f242024-05-08 01:40:02 +020052 ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
Serge Bazanskiee8c81b2024-04-03 11:59:38 +020053 doneC := make(chan error)
Tim Windelschmidt9f21f532024-05-07 15:14:20 +020054 tpmf, err := mlaunch.NewTPMFactory(filepath.Join(ld, "tpm"))
Serge Bazanski2b6dc312024-06-04 17:44:55 +020055 if err != nil {
56 log.Fatalf("NewTPMFactory: %v", err)
57 }
Tim Windelschmidt9f21f532024-05-07 15:14:20 +020058 err = mlaunch.LaunchNode(ctx, ld, sd, tpmf, &mlaunch.NodeOptions{
Leopoldaf5086b2023-01-15 14:12:42 +010059 Name: "test-node",
Serge Bazanskibe742842022-04-04 13:18:50 +020060 Ports: launch.IdentityPortMap(ports),
Serge Bazanski0ed2f962021-03-15 16:39:30 +010061 SerialPort: os.Stdout,
Serge Bazanski62e6f0b2024-09-03 12:18:56 +020062 RunVNC: true,
Serge Bazanski0ed2f962021-03-15 16:39:30 +010063 NodeParameters: &apb.NodeParameters{
64 Cluster: &apb.NodeParameters_ClusterBootstrap_{
Tim Windelschmidt9f21f532024-05-07 15:14:20 +020065 ClusterBootstrap: mlaunch.InsecureClusterBootstrap,
Serge Bazanski0ed2f962021-03-15 16:39:30 +010066 },
67 },
Serge Bazanskiee8c81b2024-04-03 11:59:38 +020068 }, doneC)
Serge Bazanski075465c2021-11-16 15:38:49 +010069 if err != nil {
70 log.Fatalf("LaunchNode: %v", err)
Lorenz Brunfc5dbc62020-05-28 12:18:07 +020071 }
Serge Bazanskiee8c81b2024-04-03 11:59:38 +020072 err = <-doneC
73 if err != nil {
74 log.Fatalf("Node returned: %v", err)
75 }
Lorenz Brunfc5dbc62020-05-28 12:18:07 +020076}