@@ -682,23 +682,65 @@ func TestGetFdByName(t *testing.T) {
682682 expectedFd : 3 ,
683683 },
684684 {
685- name : "multiple sockets - first" ,
685+ name : "multiple different sockets - first" ,
686686 fdNames : "http:https:dns" ,
687687 socketName : "http" ,
688688 expectedFd : 3 ,
689689 },
690690 {
691- name : "multiple sockets - second" ,
691+ name : "multiple different sockets - second" ,
692692 fdNames : "http:https:dns" ,
693693 socketName : "https" ,
694694 expectedFd : 4 ,
695695 },
696696 {
697- name : "multiple sockets - third" ,
697+ name : "multiple different sockets - third" ,
698698 fdNames : "http:https:dns" ,
699699 socketName : "dns" ,
700700 expectedFd : 5 ,
701701 },
702+ {
703+ name : "duplicate names - first occurrence (no index)" ,
704+ fdNames : "web:web:api" ,
705+ socketName : "web" ,
706+ expectedFd : 3 ,
707+ },
708+ {
709+ name : "duplicate names - first occurrence (explicit index 0)" ,
710+ fdNames : "web:web:api" ,
711+ socketName : "web:0" ,
712+ expectedFd : 3 ,
713+ },
714+ {
715+ name : "duplicate names - second occurrence (index 1)" ,
716+ fdNames : "web:web:api" ,
717+ socketName : "web:1" ,
718+ expectedFd : 4 ,
719+ },
720+ {
721+ name : "complex duplicates - first api" ,
722+ fdNames : "web:api:web:api:dns" ,
723+ socketName : "api:0" ,
724+ expectedFd : 4 ,
725+ },
726+ {
727+ name : "complex duplicates - second api" ,
728+ fdNames : "web:api:web:api:dns" ,
729+ socketName : "api:1" ,
730+ expectedFd : 6 ,
731+ },
732+ {
733+ name : "complex duplicates - first web" ,
734+ fdNames : "web:api:web:api:dns" ,
735+ socketName : "web:0" ,
736+ expectedFd : 3 ,
737+ },
738+ {
739+ name : "complex duplicates - second web" ,
740+ fdNames : "web:api:web:api:dns" ,
741+ socketName : "web:1" ,
742+ expectedFd : 5 ,
743+ },
702744 {
703745 name : "socket not found" ,
704746 fdNames : "http:https" ,
@@ -717,6 +759,30 @@ func TestGetFdByName(t *testing.T) {
717759 socketName : "http" ,
718760 expectError : true ,
719761 },
762+ {
763+ name : "index out of range" ,
764+ fdNames : "web:web" ,
765+ socketName : "web:2" ,
766+ expectError : true ,
767+ },
768+ {
769+ name : "negative index" ,
770+ fdNames : "web" ,
771+ socketName : "web:-1" ,
772+ expectError : true ,
773+ },
774+ {
775+ name : "invalid index format" ,
776+ fdNames : "web" ,
777+ socketName : "web:abc" ,
778+ expectError : true ,
779+ },
780+ {
781+ name : "too many colons" ,
782+ fdNames : "web" ,
783+ socketName : "web:0:extra" ,
784+ expectError : true ,
785+ },
720786 }
721787
722788 for _ , tc := range tests {
@@ -788,6 +854,20 @@ func TestParseNetworkAddressFdName(t *testing.T) {
788854 Host : "5" ,
789855 },
790856 },
857+ {
858+ input : "fdname/http:0" ,
859+ expectAddr : NetworkAddress {
860+ Network : "fd" ,
861+ Host : "3" ,
862+ },
863+ },
864+ {
865+ input : "fdname/https:0" ,
866+ expectAddr : NetworkAddress {
867+ Network : "fd" ,
868+ Host : "4" ,
869+ },
870+ },
791871 {
792872 input : "fdgramname/http" ,
793873 expectAddr : NetworkAddress {
@@ -802,6 +882,13 @@ func TestParseNetworkAddressFdName(t *testing.T) {
802882 Host : "4" ,
803883 },
804884 },
885+ {
886+ input : "fdgramname/http:0" ,
887+ expectAddr : NetworkAddress {
888+ Network : "fdgram" ,
889+ Host : "3" ,
890+ },
891+ },
805892 {
806893 input : "fdname/nonexistent" ,
807894 expectErr : true ,
@@ -810,6 +897,14 @@ func TestParseNetworkAddressFdName(t *testing.T) {
810897 input : "fdgramname/nonexistent" ,
811898 expectErr : true ,
812899 },
900+ {
901+ input : "fdname/http:99" ,
902+ expectErr : true ,
903+ },
904+ {
905+ input : "fdname/invalid:abc" ,
906+ expectErr : true ,
907+ },
813908 // Test that old fd/N syntax still works
814909 {
815910 input : "fd/7" ,
0 commit comments