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