mirror of
https://github.com/DeBrosOfficial/network.git
synced 2025-12-11 07:38:49 +00:00
- Added new E2E tests for authentication, cache operations, and IPFS interactions to improve coverage and reliability. - Introduced concurrency tests for cache operations to validate performance under load. - Updated `go.mod` to include `github.com/mattn/go-sqlite3` as a dependency for database interactions. - Refined Makefile to simplify E2E test execution and configuration discovery. - Removed outdated client E2E tests and consolidated related functionality for better maintainability.
224 lines
5.1 KiB
Go
224 lines
5.1 KiB
Go
//go:build e2e
|
|
|
|
package e2e
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestNetwork_Health(t *testing.T) {
|
|
SkipIfMissingGateway(t)
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
defer cancel()
|
|
|
|
req := &HTTPRequest{
|
|
Method: http.MethodGet,
|
|
URL: GetGatewayURL() + "/v1/health",
|
|
SkipAuth: true,
|
|
}
|
|
|
|
body, status, err := req.Do(ctx)
|
|
if err != nil {
|
|
t.Fatalf("health check failed: %v", err)
|
|
}
|
|
|
|
if status != http.StatusOK {
|
|
t.Fatalf("expected status 200, got %d", status)
|
|
}
|
|
|
|
var resp map[string]interface{}
|
|
if err := DecodeJSON(body, &resp); err != nil {
|
|
t.Fatalf("failed to decode response: %v", err)
|
|
}
|
|
|
|
if resp["status"] != "ok" {
|
|
t.Fatalf("expected status 'ok', got %v", resp["status"])
|
|
}
|
|
}
|
|
|
|
func TestNetwork_Status(t *testing.T) {
|
|
SkipIfMissingGateway(t)
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
defer cancel()
|
|
|
|
req := &HTTPRequest{
|
|
Method: http.MethodGet,
|
|
URL: GetGatewayURL() + "/v1/network/status",
|
|
}
|
|
|
|
body, status, err := req.Do(ctx)
|
|
if err != nil {
|
|
t.Fatalf("status check failed: %v", err)
|
|
}
|
|
|
|
if status != http.StatusOK {
|
|
t.Fatalf("expected status 200, got %d", status)
|
|
}
|
|
|
|
var resp map[string]interface{}
|
|
if err := DecodeJSON(body, &resp); err != nil {
|
|
t.Fatalf("failed to decode response: %v", err)
|
|
}
|
|
|
|
if _, ok := resp["connected"]; !ok {
|
|
t.Fatalf("expected 'connected' field in response")
|
|
}
|
|
|
|
if _, ok := resp["peer_count"]; !ok {
|
|
t.Fatalf("expected 'peer_count' field in response")
|
|
}
|
|
}
|
|
|
|
func TestNetwork_Peers(t *testing.T) {
|
|
SkipIfMissingGateway(t)
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
defer cancel()
|
|
|
|
req := &HTTPRequest{
|
|
Method: http.MethodGet,
|
|
URL: GetGatewayURL() + "/v1/network/peers",
|
|
}
|
|
|
|
body, status, err := req.Do(ctx)
|
|
if err != nil {
|
|
t.Fatalf("peers check failed: %v", err)
|
|
}
|
|
|
|
if status != http.StatusOK {
|
|
t.Fatalf("expected status 200, got %d", status)
|
|
}
|
|
|
|
var resp map[string]interface{}
|
|
if err := DecodeJSON(body, &resp); err != nil {
|
|
t.Fatalf("failed to decode response: %v", err)
|
|
}
|
|
|
|
if _, ok := resp["peers"]; !ok {
|
|
t.Fatalf("expected 'peers' field in response")
|
|
}
|
|
}
|
|
|
|
func TestNetwork_ProxyAnonSuccess(t *testing.T) {
|
|
SkipIfMissingGateway(t)
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
|
defer cancel()
|
|
|
|
req := &HTTPRequest{
|
|
Method: http.MethodPost,
|
|
URL: GetGatewayURL() + "/v1/proxy/anon",
|
|
Body: map[string]interface{}{
|
|
"url": "https://httpbin.org/get",
|
|
"method": "GET",
|
|
"headers": map[string]string{"User-Agent": "DeBros-E2E-Test/1.0"},
|
|
},
|
|
}
|
|
|
|
body, status, err := req.Do(ctx)
|
|
if err != nil {
|
|
t.Fatalf("proxy anon request failed: %v", err)
|
|
}
|
|
|
|
if status != http.StatusOK {
|
|
t.Fatalf("expected status 200, got %d: %s", status, string(body))
|
|
}
|
|
|
|
var resp map[string]interface{}
|
|
if err := DecodeJSON(body, &resp); err != nil {
|
|
t.Fatalf("failed to decode response: %v", err)
|
|
}
|
|
|
|
if resp["status_code"] != float64(200) {
|
|
t.Fatalf("expected proxy status 200, got %v", resp["status_code"])
|
|
}
|
|
|
|
if _, ok := resp["body"]; !ok {
|
|
t.Fatalf("expected 'body' field in response")
|
|
}
|
|
}
|
|
|
|
func TestNetwork_ProxyAnonBadURL(t *testing.T) {
|
|
SkipIfMissingGateway(t)
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
defer cancel()
|
|
|
|
req := &HTTPRequest{
|
|
Method: http.MethodPost,
|
|
URL: GetGatewayURL() + "/v1/proxy/anon",
|
|
Body: map[string]interface{}{
|
|
"url": "http://localhost:1/nonexistent",
|
|
"method": "GET",
|
|
},
|
|
}
|
|
|
|
_, status, err := req.Do(ctx)
|
|
if err == nil && status == http.StatusOK {
|
|
t.Fatalf("expected error for bad URL, got status 200")
|
|
}
|
|
}
|
|
|
|
func TestNetwork_ProxyAnonPostRequest(t *testing.T) {
|
|
SkipIfMissingGateway(t)
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
|
defer cancel()
|
|
|
|
req := &HTTPRequest{
|
|
Method: http.MethodPost,
|
|
URL: GetGatewayURL() + "/v1/proxy/anon",
|
|
Body: map[string]interface{}{
|
|
"url": "https://httpbin.org/post",
|
|
"method": "POST",
|
|
"headers": map[string]string{"User-Agent": "DeBros-E2E-Test/1.0"},
|
|
"body": "test_data",
|
|
},
|
|
}
|
|
|
|
body, status, err := req.Do(ctx)
|
|
if err != nil {
|
|
t.Fatalf("proxy anon POST failed: %v", err)
|
|
}
|
|
|
|
if status != http.StatusOK {
|
|
t.Fatalf("expected status 200, got %d: %s", status, string(body))
|
|
}
|
|
|
|
var resp map[string]interface{}
|
|
if err := DecodeJSON(body, &resp); err != nil {
|
|
t.Fatalf("failed to decode response: %v", err)
|
|
}
|
|
|
|
if resp["status_code"] != float64(200) {
|
|
t.Fatalf("expected proxy status 200, got %v", resp["status_code"])
|
|
}
|
|
}
|
|
|
|
func TestNetwork_Unauthorized(t *testing.T) {
|
|
// Test without API key
|
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
defer cancel()
|
|
|
|
// Create request without auth
|
|
req := &HTTPRequest{
|
|
Method: http.MethodGet,
|
|
URL: GetGatewayURL() + "/v1/network/status",
|
|
SkipAuth: true,
|
|
}
|
|
|
|
_, status, err := req.Do(ctx)
|
|
if err != nil {
|
|
t.Fatalf("request failed: %v", err)
|
|
}
|
|
|
|
if status != http.StatusUnauthorized && status != http.StatusForbidden {
|
|
t.Logf("warning: expected 401/403, got %d (auth may not be enforced on this endpoint)", status)
|
|
}
|
|
}
|