{"record":{"id":"69b12bca062987c8","repo":"juanfont/headscale","slug":"no-network-named-s","errorCode":null,"errorMessage":"no network named: %s","messagePattern":"no network named: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"integration/scenario.go","lineNumber":326,"sourceCode":"\t}\n\n\tmak.Set(&s.networks, name, network)\n\n\treturn network, nil\n}\n\nfunc (s *Scenario) Networks() []*dockertest.Network {\n\tif len(s.networks) == 0 {\n\t\tpanic(\"Scenario.Networks called with empty network list\")\n\t}\n\n\treturn xmaps.Values(s.networks)\n}\n\nfunc (s *Scenario) Network(name string) (*dockertest.Network, error) {\n\tnet, ok := s.networks[s.prefixedNetworkName(name)]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"no network named: %s\", name) //nolint:err113\n\t}\n\n\treturn net, nil\n}\n\nfunc (s *Scenario) SubnetOfNetwork(name string) (*netip.Prefix, error) {\n\tnet, ok := s.networks[s.prefixedNetworkName(name)]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"no network named: %s\", name) //nolint:err113\n\t}\n\n\tif len(net.Network.IPAM.Config) == 0 {\n\t\treturn nil, fmt.Errorf(\"no IPAM config found in network: %s\", name) //nolint:err113\n\t}\n\n\tpref, err := netip.ParsePrefix(net.Network.IPAM.Config[0].Subnet)\n\tif err != nil {\n\t\treturn nil, err","sourceCodeStart":308,"sourceCodeEnd":344,"githubUrl":"https://github.com/juanfont/headscale/blob/565fd254d06c4c7f9a8cad1714a43445c79ba420/integration/scenario.go#L308-L344","documentation":"Returned by Scenario.Network(name) when no Docker network was registered in the scenario under the given (prefix-normalised) name. It is a sentinel-style lookup failure, marked nolint:err113 because it is a dynamic (non-wrapped) error created at the call site.","triggerScenarios":"Calling s.Network(name) before s.AddNetwork(name), or with a name that was never added; also when the lookup key's scenario prefix does not match the name used at creation.","commonSituations":"Test helper fetches a network by string that differs from the one used in AddNetwork (typo, extra prefix); calling Network after Shutdown cleared the map; copy-paste between scenarios with different network names.","solutions":["Ensure AddNetwork(name) succeeded before any Network(name) call in the test flow","Compare the exact name string used for creation and lookup (names are stored prefixed via prefixedNetworkName)","Capture the *dockertest.Network returned by AddNetwork and reuse it instead of re-looking it up by name"],"exampleFix":"// before\nnet, err := scenario.Network(\"mynet\")\n\n// after: keep the handle from creation\nnet, err := scenario.AddNetwork(\"mynet\")\nif err != nil {\n    t.Fatalf(\"creating network: %s\", err)\n}","handlingStrategy":"validation","validationCode":"func hasNetwork(s *integration.Scenario, name string) bool {\n    _, err := s.Network(name)\n    return err == nil\n}","typeGuard":null,"tryCatchPattern":"net, err := scenario.Network(name)\nif err != nil {\n    t.Fatalf(\"network %q missing — was AddNetwork called? %v\", name, err)\n}","preventionTips":["Reuse the *dockertest.Network handle returned by AddNetwork instead of name lookups","Keep network-name constants in one place to avoid typos"],"tags":["docker","network","integration-test","lookup"],"backgroundTag":null,"analyzedSha":"565fd254d06c4c7f9a8cad1714a43445c79ba420","analyzedAt":"2026-08-15T13:12:30.133Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}