chore: remove unnecessary tests
Kim committed
Apr 13, 2026 at 16:00 UTC
54695fe801a913b2c901261f414ceb30a99d773e
1 file changed
-440
portal/server_test.go
-440
@@ -10,50 +10,20 @@ import (
10
"crypto/x509/pkix"
11
"encoding/json"
12
"encoding/pem"
13
- "errors"
13
"io"
14
"math/big"
15
"net/http"
16
"os"
17
"path/filepath"
19
- "reflect"
20
- "sort"
18
"strings"
19
"testing"
20
"time"
21
22
"github.com/gosuda/portal-tunnel/v2/portal/acme"
26
- "github.com/gosuda/portal-tunnel/v2/portal/discovery"
23
"github.com/gosuda/portal-tunnel/v2/types"
24
"github.com/gosuda/portal-tunnel/v2/utils"
25
)
26
31
-func mustRelayDescriptor(t *testing.T, relayURL string) types.RelayDescriptor {
32
- t.Helper()
33
-
34
- now := time.Now().UTC()
35
- desc, err := utils.NormalizeDescriptor(types.RelayDescriptor{
36
- Identity: types.Identity{
37
- Name: utils.PortalRootHost(relayURL),
38
- },
39
- RelayID: relayURL,
40
- Version: 1,
41
- IssuedAt: now,
42
- ExpiresAt: now.Add(time.Hour),
43
- APIHTTPSAddr: relayURL,
44
- })
45
- if err != nil {
46
- t.Fatalf("NormalizeDescriptor() error = %v", err)
47
- }
48
- return desc
49
-}
50
-
51
-func applyRelay(t *testing.T, set *discovery.RelaySet, identity types.Identity, targetURL string, resp types.DiscoveryResponse, now time.Time) error {
52
- t.Helper()
53
- _, err := set.ApplyRelayDiscoveryResponse(identity, targetURL, resp, now)
54
- return err
55
-}
56
-
27
func tempIdentityPath(t *testing.T) string {
28
t.Helper()
29
return t.TempDir()
@@ -436,416 +406,6 @@ func TestRegisterLeaseBuildsUDPEnabledRuntime(t *testing.T) {
406
}
407
}
408
439
-func TestServerRecordVerifiedDiscoveryPeerRequiresDirectConfirmation(t *testing.T) {
440
- t.Parallel()
441
-
442
- server, err := NewServer(ServerConfig{
443
- PortalURL: "https://portal.example.com",
444
- IdentityPath: tempIdentityPath(t),
445
- Bootstraps: []string{"https://bootstrap.example.com"},
446
- DiscoveryEnabled: true,
447
- })
448
- if err != nil {
449
- t.Fatalf("NewServer() error = %v", err)
450
- }
451
-
452
- bootstrapDesc := mustRelayDescriptor(t, "https://bootstrap.example.com")
453
- relayADesc := mustRelayDescriptor(t, "https://relay-a.example.com")
454
-
455
- applyDiscovery := func(targetIdentity types.Identity, targetURL string, resp types.DiscoveryResponse) error {
456
- now := time.Now().UTC()
457
- return applyRelay(t, server.relaySet, targetIdentity, targetURL, resp, now)
458
- }
459
-
460
- err = applyDiscovery(
461
- bootstrapDesc.Identity,
462
- bootstrapDesc.APIHTTPSAddr,
463
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: bootstrapDesc},
464
- )
465
- if err != nil {
466
- t.Fatalf("applyRelayDiscoveryResponse() bootstrap error = %v", err)
467
- }
468
-
469
- err = applyDiscovery(
470
- bootstrapDesc.Identity,
471
- bootstrapDesc.APIHTTPSAddr,
472
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: bootstrapDesc, Relays: []types.RelayDescriptor{relayADesc}},
473
- )
474
- if err != nil {
475
- t.Fatalf("applyRelayDiscoveryResponse() hinted error = %v", err)
476
- }
477
- knownURLs := make([]string, 0)
478
- for _, state := range server.relaySet.ActiveRelays() {
479
- knownURLs = append(knownURLs, state.Descriptor.APIHTTPSAddr)
480
- }
481
- sort.Strings(knownURLs)
482
- if !reflect.DeepEqual(knownURLs, []string{"https://bootstrap.example.com"}) {
483
- t.Fatalf("ActiveRelayURLs() = %v, want [%q]", knownURLs, "https://bootstrap.example.com")
484
- }
485
- advertisedDescriptors := server.relaySet.ConfirmedDescriptors()
486
- advertisedURLs := make([]string, 0, len(advertisedDescriptors))
487
- for _, descriptor := range advertisedDescriptors {
488
- if strings.TrimSpace(descriptor.APIHTTPSAddr) == "" {
489
- continue
490
- }
491
- advertisedURLs = append(advertisedURLs, descriptor.APIHTTPSAddr)
492
- }
493
- sort.Strings(advertisedURLs)
494
- if !reflect.DeepEqual(advertisedURLs, []string{"https://bootstrap.example.com"}) {
495
- t.Fatalf("ConfirmedDescriptors() = %v, want [%q]", advertisedURLs, "https://bootstrap.example.com")
496
- }
497
-
498
- err = applyDiscovery(
499
- relayADesc.Identity,
500
- relayADesc.APIHTTPSAddr,
501
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: relayADesc},
502
- )
503
- if err != nil {
504
- t.Fatalf("applyRelayDiscoveryResponse() confirm error = %v", err)
505
- }
506
- advertisedDescriptors = server.relaySet.ConfirmedDescriptors()
507
- advertisedURLs = advertisedURLs[:0]
508
- for _, descriptor := range advertisedDescriptors {
509
- if strings.TrimSpace(descriptor.APIHTTPSAddr) == "" {
510
- continue
511
- }
512
- advertisedURLs = append(advertisedURLs, descriptor.APIHTTPSAddr)
513
- }
514
- sort.Strings(advertisedURLs)
515
- if !reflect.DeepEqual(advertisedURLs, []string{"https://bootstrap.example.com", "https://relay-a.example.com"}) {
516
- t.Fatalf("ConfirmedDescriptors() = %v, want [%q %q]", advertisedURLs, "https://bootstrap.example.com", "https://relay-a.example.com")
517
- }
518
-}
519
-
520
-func TestServerBannedDiscoveryPeerIsNotAdvertised(t *testing.T) {
521
- t.Parallel()
522
-
523
- server, err := NewServer(ServerConfig{
524
- PortalURL: "https://portal.example.com",
525
- IdentityPath: tempIdentityPath(t),
526
- Bootstraps: []string{"https://bootstrap.example.com"},
527
- DiscoveryEnabled: true,
528
- })
529
- if err != nil {
530
- t.Fatalf("NewServer() error = %v", err)
531
- }
532
-
533
- bootstrapDesc := mustRelayDescriptor(t, "https://bootstrap.example.com")
534
- relayADesc := mustRelayDescriptor(t, "https://relay-a.example.com")
535
- now := time.Now().UTC()
536
-
537
- if err := applyRelay(
538
- t,
539
- server.relaySet,
540
- bootstrapDesc.Identity,
541
- bootstrapDesc.APIHTTPSAddr,
542
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: bootstrapDesc, Relays: []types.RelayDescriptor{relayADesc}},
543
- now,
544
- ); err != nil {
545
- t.Fatalf("ApplyRelayDiscoveryResponse() bootstrap error = %v", err)
546
- }
547
- if err := applyRelay(
548
- t,
549
- server.relaySet,
550
- relayADesc.Identity,
551
- relayADesc.APIHTTPSAddr,
552
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: relayADesc},
553
- now.Add(time.Second),
554
- ); err != nil {
555
- t.Fatalf("ApplyRelayDiscoveryResponse() direct confirm error = %v", err)
556
- }
557
-
558
- server.relaySet.BanRelayURL(relayADesc.APIHTTPSAddr)
559
-
560
- advertisedDescriptors := server.relaySet.ConfirmedDescriptors()
561
- advertisedURLs := make([]string, 0, len(advertisedDescriptors))
562
- for _, descriptor := range advertisedDescriptors {
563
- if strings.TrimSpace(descriptor.APIHTTPSAddr) == "" {
564
- continue
565
- }
566
- advertisedURLs = append(advertisedURLs, descriptor.APIHTTPSAddr)
567
- }
568
- sort.Strings(advertisedURLs)
569
- if !reflect.DeepEqual(advertisedURLs, []string{"https://bootstrap.example.com"}) {
570
- t.Fatalf("ConfirmedDescriptors() = %v, want banned relay excluded", advertisedURLs)
571
- }
572
-}
573
-
574
-func TestServerRecordVerifiedDiscoveryPeerExpiresAfterRepeatedDirectFailures(t *testing.T) {
575
- t.Parallel()
576
-
577
- server, err := NewServer(ServerConfig{
578
- PortalURL: "https://portal.example.com",
579
- IdentityPath: tempIdentityPath(t),
580
- Bootstraps: []string{"https://bootstrap.example.com"},
581
- DiscoveryEnabled: true,
582
- })
583
- if err != nil {
584
- t.Fatalf("NewServer() error = %v", err)
585
- }
586
-
587
- bootstrapDesc := mustRelayDescriptor(t, "https://bootstrap.example.com")
588
- relayADesc := mustRelayDescriptor(t, "https://relay-a.example.com")
589
- now := time.Now().UTC()
590
-
591
- if err := applyRelay(
592
- t,
593
- server.relaySet,
594
- bootstrapDesc.Identity,
595
- bootstrapDesc.APIHTTPSAddr,
596
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: bootstrapDesc, Relays: []types.RelayDescriptor{relayADesc}},
597
- now,
598
- ); err != nil {
599
- t.Fatalf("ApplyRelayDiscoveryResponse() bootstrap error = %v", err)
600
- }
601
- if err := applyRelay(
602
- t,
603
- server.relaySet,
604
- relayADesc.Identity,
605
- relayADesc.APIHTTPSAddr,
606
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: relayADesc},
607
- now.Add(time.Second),
608
- ); err != nil {
609
- t.Fatalf("ApplyRelayDiscoveryResponse() direct confirm error = %v", err)
610
- }
611
-
612
- for attempt := 1; attempt <= 3; attempt++ {
613
- expired, _, consecutiveFailures := server.relaySet.RecordDiscoveryFailure(
614
- relayADesc.Identity,
615
- relayADesc.APIHTTPSAddr,
616
- errors.New("direct discovery failed"),
617
- 3,
618
- )
619
- if consecutiveFailures != attempt {
620
- t.Fatalf("RecordDiscoveryFailure() consecutive = %d, want %d", consecutiveFailures, attempt)
621
- }
622
- if attempt < 3 && expired {
623
- t.Fatalf("RecordDiscoveryFailure() expired early on attempt %d", attempt)
624
- }
625
- if attempt == 3 && !expired {
626
- t.Fatalf("RecordDiscoveryFailure() expired = false on attempt %d, want true", attempt)
627
- }
628
- }
629
-
630
- advertisedDescriptors := server.relaySet.ConfirmedDescriptors()
631
- advertisedURLs := make([]string, 0, len(advertisedDescriptors))
632
- for _, descriptor := range advertisedDescriptors {
633
- if strings.TrimSpace(descriptor.APIHTTPSAddr) == "" {
634
- continue
635
- }
636
- advertisedURLs = append(advertisedURLs, descriptor.APIHTTPSAddr)
637
- }
638
- sort.Strings(advertisedURLs)
639
- if !reflect.DeepEqual(advertisedURLs, []string{"https://bootstrap.example.com"}) {
640
- t.Fatalf("ConfirmedDescriptors() = %v, want [%q] after relay expiry", advertisedURLs, "https://bootstrap.example.com")
641
- }
642
-}
643
-
644
-func TestServerBootstrapHintDoesNotResetDirectFailureBudget(t *testing.T) {
645
- t.Parallel()
646
-
647
- server, err := NewServer(ServerConfig{
648
- PortalURL: "https://portal.example.com",
649
- IdentityPath: tempIdentityPath(t),
650
- Bootstraps: []string{"https://bootstrap.example.com"},
651
- DiscoveryEnabled: true,
652
- })
653
- if err != nil {
654
- t.Fatalf("NewServer() error = %v", err)
655
- }
656
-
657
- bootstrapDesc := mustRelayDescriptor(t, "https://bootstrap.example.com")
658
- relayADesc := mustRelayDescriptor(t, "https://relay-a.example.com")
659
- now := time.Now().UTC()
660
-
661
- if err := applyRelay(
662
- t,
663
- server.relaySet,
664
- bootstrapDesc.Identity,
665
- bootstrapDesc.APIHTTPSAddr,
666
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: bootstrapDesc, Relays: []types.RelayDescriptor{relayADesc}},
667
- now,
668
- ); err != nil {
669
- t.Fatalf("ApplyRelayDiscoveryResponse() bootstrap error = %v", err)
670
- }
671
- if err := applyRelay(
672
- t,
673
- server.relaySet,
674
- relayADesc.Identity,
675
- relayADesc.APIHTTPSAddr,
676
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: relayADesc},
677
- now.Add(time.Second),
678
- ); err != nil {
679
- t.Fatalf("ApplyRelayDiscoveryResponse() direct confirm error = %v", err)
680
- }
681
-
682
- for attempt := 1; attempt <= 2; attempt++ {
683
- expired, _, consecutiveFailures := server.relaySet.RecordDiscoveryFailure(
684
- relayADesc.Identity,
685
- relayADesc.APIHTTPSAddr,
686
- errors.New("direct discovery failed"),
687
- 3,
688
- )
689
- if expired {
690
- t.Fatalf("RecordDiscoveryFailure() expired early on attempt %d", attempt)
691
- }
692
- if consecutiveFailures != attempt {
693
- t.Fatalf("RecordDiscoveryFailure() consecutive = %d, want %d", consecutiveFailures, attempt)
694
- }
695
-
696
- if err := applyRelay(
697
- t,
698
- server.relaySet,
699
- bootstrapDesc.Identity,
700
- bootstrapDesc.APIHTTPSAddr,
701
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: bootstrapDesc, Relays: []types.RelayDescriptor{relayADesc}},
702
- now.Add(time.Duration(attempt+1)*time.Second),
703
- ); err != nil {
704
- t.Fatalf("ApplyRelayDiscoveryResponse() hinted refresh error = %v", err)
705
- }
706
-
707
- advertisedDescriptors := server.relaySet.ConfirmedDescriptors()
708
- advertisedURLs := make([]string, 0, len(advertisedDescriptors))
709
- for _, descriptor := range advertisedDescriptors {
710
- if strings.TrimSpace(descriptor.APIHTTPSAddr) == "" {
711
- continue
712
- }
713
- advertisedURLs = append(advertisedURLs, descriptor.APIHTTPSAddr)
714
- }
715
- sort.Strings(advertisedURLs)
716
- if !reflect.DeepEqual(advertisedURLs, []string{"https://bootstrap.example.com", "https://relay-a.example.com"}) {
717
- t.Fatalf("ConfirmedDescriptors() = %v, want relay to remain advertised before expiry", advertisedURLs)
718
- }
719
- }
720
-
721
- expired, _, consecutiveFailures := server.relaySet.RecordDiscoveryFailure(
722
- relayADesc.Identity,
723
- relayADesc.APIHTTPSAddr,
724
- errors.New("direct discovery failed"),
725
- 3,
726
- )
727
- if !expired {
728
- t.Fatal("RecordDiscoveryFailure() expired = false on final attempt, want true")
729
- }
730
- if consecutiveFailures != 3 {
731
- t.Fatalf("RecordDiscoveryFailure() consecutive = %d, want 3", consecutiveFailures)
732
- }
733
-}
734
-
735
-func TestServerExpiredDiscoveryPeerNeedsFreshDirectConfirmation(t *testing.T) {
736
- t.Parallel()
737
-
738
- server, err := NewServer(ServerConfig{
739
- PortalURL: "https://portal.example.com",
740
- IdentityPath: tempIdentityPath(t),
741
- Bootstraps: []string{"https://bootstrap.example.com"},
742
- DiscoveryEnabled: true,
743
- })
744
- if err != nil {
745
- t.Fatalf("NewServer() error = %v", err)
746
- }
747
-
748
- bootstrapDesc := mustRelayDescriptor(t, "https://bootstrap.example.com")
749
- relayADesc := mustRelayDescriptor(t, "https://relay-a.example.com")
750
- now := time.Now().UTC()
751
-
752
- if err := applyRelay(
753
- t,
754
- server.relaySet,
755
- bootstrapDesc.Identity,
756
- bootstrapDesc.APIHTTPSAddr,
757
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: bootstrapDesc, Relays: []types.RelayDescriptor{relayADesc}},
758
- now,
759
- ); err != nil {
760
- t.Fatalf("ApplyRelayDiscoveryResponse() bootstrap error = %v", err)
761
- }
762
- if err := applyRelay(
763
- t,
764
- server.relaySet,
765
- relayADesc.Identity,
766
- relayADesc.APIHTTPSAddr,
767
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: relayADesc},
768
- now.Add(time.Second),
769
- ); err != nil {
770
- t.Fatalf("ApplyRelayDiscoveryResponse() direct confirm error = %v", err)
771
- }
772
-
773
- for attempt := 1; attempt <= 3; attempt++ {
774
- server.relaySet.RecordDiscoveryFailure(
775
- relayADesc.Identity,
776
- relayADesc.APIHTTPSAddr,
777
- errors.New("direct discovery failed"),
778
- 3,
779
- )
780
- }
781
-
782
- if err := applyRelay(
783
- t,
784
- server.relaySet,
785
- bootstrapDesc.Identity,
786
- bootstrapDesc.APIHTTPSAddr,
787
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: bootstrapDesc, Relays: []types.RelayDescriptor{relayADesc}},
788
- now.Add(5*time.Second),
789
- ); err != nil {
790
- t.Fatalf("ApplyRelayDiscoveryResponse() fresh bootstrap error = %v", err)
791
- }
792
-
793
- advertisedDescriptors := server.relaySet.ConfirmedDescriptors()
794
- advertisedURLs := make([]string, 0, len(advertisedDescriptors))
795
- for _, descriptor := range advertisedDescriptors {
796
- if strings.TrimSpace(descriptor.APIHTTPSAddr) == "" {
797
- continue
798
- }
799
- advertisedURLs = append(advertisedURLs, descriptor.APIHTTPSAddr)
800
- }
801
- sort.Strings(advertisedURLs)
802
- if !reflect.DeepEqual(advertisedURLs, []string{"https://bootstrap.example.com"}) {
803
- t.Fatalf("ConfirmedDescriptors() = %v, want relay to stay hidden until reconfirmed", advertisedURLs)
804
- }
805
-
806
- if err := applyRelay(
807
- t,
808
- server.relaySet,
809
- relayADesc.Identity,
810
- relayADesc.APIHTTPSAddr,
811
- types.DiscoveryResponse{ProtocolVersion: types.ProtocolVersion, Self: relayADesc},
812
- now.Add(6*time.Second),
813
- ); err != nil {
814
- t.Fatalf("ApplyRelayDiscoveryResponse() reconfirm error = %v", err)
815
- }
816
-
817
- advertisedDescriptors = server.relaySet.ConfirmedDescriptors()
818
- advertisedURLs = advertisedURLs[:0]
819
- for _, descriptor := range advertisedDescriptors {
820
- if strings.TrimSpace(descriptor.APIHTTPSAddr) == "" {
821
- continue
822
- }
823
- advertisedURLs = append(advertisedURLs, descriptor.APIHTTPSAddr)
824
- }
825
- sort.Strings(advertisedURLs)
826
- if !reflect.DeepEqual(advertisedURLs, []string{"https://bootstrap.example.com", "https://relay-a.example.com"}) {
827
- t.Fatalf("ConfirmedDescriptors() = %v, want relay restored after direct confirmation", advertisedURLs)
828
- }
829
-}
830
-
831
-func TestNewServerFiltersSelfBootstrapURLFromConfig(t *testing.T) {
832
- t.Parallel()
833
-
834
- server, err := NewServer(ServerConfig{
835
- PortalURL: "https://portal.example.com",
836
- IdentityPath: tempIdentityPath(t),
837
- Bootstraps: []string{"https://bootstrap.example.com", "https://portal.example.com", "https://localhost:4017"},
838
- DiscoveryEnabled: true,
839
- })
840
- if err != nil {
841
- t.Fatalf("NewServer() error = %v", err)
842
- }
843
-
844
- if !reflect.DeepEqual(server.cfg.Bootstraps, []string{"https://bootstrap.example.com", "https://localhost:4017"}) {
845
- t.Fatalf("cfg.Bootstraps = %v, want self bootstrap filtered and loopback kept", server.cfg.Bootstraps)
846
- }
847
-}
848
-
409
func TestServerStartHidesDiscoveryRoutesWhenDisabled(t *testing.T) {
410
t.Parallel()
411