mirror of
https://github.com/luxfi/node.git
synced 2026-10-30 15:24:05 +00:00
The module already called itself github.com/luxfi/node while containing no node in Go: cmd/luxd was twenty-one lines that printed the size of a few types, and the Go column of the matrix measured a VM plugin. A repo that fetches the thing it claims to be has not replaced it, so the Go sources move in — 1515 files, the daemon and everything under it — and the build reaches outside this module for nothing. Rust and C++ sit beside it unchanged and are still measured against it by the differential. That is the point of one repo: the reference implementation and the two ports are the same checkout, so parity is a thing you can run rather than a thing you assert. Verified: builds, and the closure carries no lux-private — checked at build time rather than believed. The daemon starts twelve chains on a local network (P X C Q Z A B G K M F, plus D through its plugin) and reports healthy.
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package server
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/zap-proto/zip"
|
|
)
|
|
|
|
type said struct {
|
|
Word string `json:"word"`
|
|
}
|
|
|
|
// TestMount asserts both halves of a mount: a typed op answers an ordinary
|
|
// net/http request, and the OpenAPI document answers too. The document is the
|
|
// half that says Mount SERVES the app rather than reaching past zip for its
|
|
// request handler — the document route is installed by serving.
|
|
func TestMount(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
app := zip.New(zip.Config{AppName: "mounted"})
|
|
zip.Get(app, "/say", func(context.Context, *struct{}) (*said, error) {
|
|
return &said{Word: "hello"}, nil
|
|
})
|
|
|
|
handler, err := Mount(app)
|
|
require.NoError(err)
|
|
t.Cleanup(func() { _ = app.Shutdown() })
|
|
|
|
body, code := ask(t, handler, "/say")
|
|
require.Equal(http.StatusOK, code)
|
|
require.JSONEq(`{"word":"hello"}`, body)
|
|
|
|
body, code = ask(t, handler, zip.SpecPath)
|
|
require.Equal(http.StatusOK, code)
|
|
require.Contains(body, `"/say"`)
|
|
}
|
|
|
|
func ask(t *testing.T, handler http.Handler, path string) (string, int) {
|
|
t.Helper()
|
|
rec := httptest.NewRecorder()
|
|
handler.ServeHTTP(rec, httptest.NewRequest(http.MethodGet, path, nil))
|
|
body, err := io.ReadAll(rec.Result().Body)
|
|
require.NoError(t, err)
|
|
return string(body), rec.Code
|
|
}
|