mirror of
https://github.com/ultravioletrs/cocos.git
synced 2026-06-23 04:10:25 +00:00
a3265bc346
* feat: Introduce computation runner, log forwarder, ingress, and egress proxy services. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * feat: Update Go environment variable parsing and build system to use new architecture and repository. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * feat: Update package sources to `sammyoina/cocos-ai` at a specific commit, add log-forwarder pre-start hook, and rename proxy binaries. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * chore: Update build system references to a specific commit and enhance logging for service connections and message processing. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * build: Update package source repositories and versions, migrate client logging to slog, and adjust ingress/egress proxy build and install steps. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * debug stuck Signed-off-by: Sammy Oina <sammyoina@gmail.com> * debug Signed-off-by: Sammy Oina <sammyoina@gmail.com> * debug Signed-off-by: Sammy Oina <sammyoina@gmail.com> * feat: add HTTP/2 support to egress proxy and update build system to use specific commit hashes Signed-off-by: Sammy Oina <sammyoina@gmail.com> * feat: enhance egress proxy CONNECT handling, update package sources, and add gRPC test utility Signed-off-by: Sammy Oina <sammyoina@gmail.com> * feat: Update build system for various services to a specific commit from a new repository, change agent gRPC port to 7001, and add a gRPC test client. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * feat: Migrate agent-internal gRPC communication to Unix sockets, set ingress proxy to port 7002, and update build hashes. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * refactor: Remove standalone ingress-proxy systemd service and update component versions. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix: Prevent computation re-initialization in agent and update component versions across several packages. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * feat: update package versions and enable h2c support in ingress proxy. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * feat: refactor ingress proxy to support HTTP/2 over Unix sockets and update component versions. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * feat: Update build system package sources to `ultravioletrs/cocos` and reduce agent logging verbosity. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * refactor: improve error handling in proxy commands and remove unused gRPC test Signed-off-by: Sammy Oina <sammyoina@gmail.com> * test: add mock service state return value in handleRunReqChunks test Signed-off-by: Sammy Oina <sammyoina@gmail.com> * feat: add comprehensive tests for service and proxy components Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix linter Signed-off-by: Sammy Oina <sammyoina@gmail.com> * improve coverage Signed-off-by: Sammy Oina <sammyoina@gmail.com> * test: add gRPC client and ingress adapter tests, and update egress proxy tests. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * improve coverage Signed-off-by: Sammy Oina <sammyoina@gmail.com> --------- Signed-off-by: Sammy Oina <sammyoina@gmail.com>
131 lines
2.8 KiB
Go
131 lines
2.8 KiB
Go
// Copyright (c) Ultraviolet
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package agent
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"google.golang.org/grpc/metadata"
|
|
)
|
|
|
|
func TestDatasetsString(t *testing.T) {
|
|
datasets := Datasets{
|
|
{
|
|
Hash: [32]byte{1, 2, 3},
|
|
UserKey: []byte("user_key"),
|
|
Filename: "test.dat",
|
|
},
|
|
}
|
|
|
|
expected := `[{"hash":[1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"user_key":"dXNlcl9rZXk=","filename":"test.dat"}]`
|
|
result := datasets.String()
|
|
|
|
if result != expected {
|
|
t.Errorf("Datasets.String() = %v, want %v", result, expected)
|
|
}
|
|
}
|
|
|
|
func TestIndexToContext(t *testing.T) {
|
|
ctx := context.Background()
|
|
index := 5
|
|
|
|
newCtx := IndexToContext(ctx, index)
|
|
result, ok := IndexFromContext(newCtx)
|
|
|
|
if !ok {
|
|
t.Errorf("IndexFromContext() ok = false, want true")
|
|
}
|
|
|
|
if result != index {
|
|
t.Errorf("IndexFromContext() = %v, want %v", result, index)
|
|
}
|
|
}
|
|
|
|
func TestDecompressFromContext(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
ctx context.Context
|
|
expected bool
|
|
}{
|
|
{
|
|
name: "No decompress metadata",
|
|
ctx: context.Background(),
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "Decompress true",
|
|
ctx: metadata.NewIncomingContext(
|
|
context.Background(),
|
|
metadata.Pairs(DecompressKey, "true"),
|
|
),
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "Decompress false",
|
|
ctx: metadata.NewIncomingContext(
|
|
context.Background(),
|
|
metadata.Pairs(DecompressKey, "false"),
|
|
),
|
|
expected: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := DecompressFromContext(tt.ctx)
|
|
if result != tt.expected {
|
|
t.Errorf("DecompressFromContext() = %v, want %v", result, tt.expected)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestDecompressToContext(t *testing.T) {
|
|
ctx := context.Background()
|
|
decompress := true
|
|
|
|
newCtx := DecompressToContext(ctx, decompress)
|
|
md, ok := metadata.FromOutgoingContext(newCtx)
|
|
|
|
if !ok {
|
|
t.Errorf("metadata.FromOutgoingContext() ok = false, want true")
|
|
}
|
|
|
|
vals := md.Get(DecompressKey)
|
|
if len(vals) != 1 {
|
|
t.Errorf("len(md.Get(DecompressKey)) = %v, want 1", len(vals))
|
|
}
|
|
|
|
if vals[0] != "true" {
|
|
t.Errorf("md.Get(DecompressKey)[0] = %v, want 'true'", vals[0])
|
|
}
|
|
}
|
|
|
|
func TestAgentConfigJSON(t *testing.T) {
|
|
cfg := AgentConfig{
|
|
CertFile: "cert.pem",
|
|
KeyFile: "key.pem",
|
|
ServerCAFile: "server-ca.pem",
|
|
ClientCAFile: "client-ca.pem",
|
|
AttestedTls: true,
|
|
}
|
|
|
|
data, err := json.Marshal(cfg)
|
|
if err != nil {
|
|
t.Fatalf("Failed to marshal AgentConfig: %v", err)
|
|
}
|
|
|
|
var unmarshaledConfig AgentConfig
|
|
err = json.Unmarshal(data, &unmarshaledConfig)
|
|
if err != nil {
|
|
t.Fatalf("Failed to unmarshal AgentConfig: %v", err)
|
|
}
|
|
|
|
if !reflect.DeepEqual(cfg, unmarshaledConfig) {
|
|
t.Errorf("Unmarshaled config does not match original. Got %+v, want %+v", unmarshaledConfig, cfg)
|
|
}
|
|
}
|