@@ -888,6 +888,199 @@ func TestServiceV2_AnnounceHost(t *testing.T) {
888
888
}
889
889
}
890
890
891
+ func TestServiceV2_ListHosts (t * testing.T ) {
892
+ tests := []struct {
893
+ name string
894
+ mock func (host * resource.Host , hostManager resource.HostManager , mr * resource.MockResourceMockRecorder , mh * resource.MockHostManagerMockRecorder )
895
+ expect func (t * testing.T , host * resource.Host , resp []* commonv2.Host , err error )
896
+ }{
897
+ {
898
+ name : "host loading unsuccessful" ,
899
+ mock : func (host * resource.Host , hostManager resource.HostManager , mr * resource.MockResourceMockRecorder , mh * resource.MockHostManagerMockRecorder ) {
900
+ gomock .InOrder (
901
+ mr .HostManager ().Return (hostManager ).Times (1 ),
902
+ mh .Range (gomock .Any ()).Do (func (f func (key , value any ) bool ) {
903
+ f (nil , nil )
904
+ }).Return ().Times (1 ),
905
+ )
906
+ },
907
+ expect : func (t * testing.T , host * resource.Host , resp []* commonv2.Host , err error ) {
908
+ assert := assert .New (t )
909
+ assert .NoError (err )
910
+ assert .Equal (len (resp ), 0 )
911
+ },
912
+ },
913
+ {
914
+ name : "host loading successful" ,
915
+ mock : func (host * resource.Host , hostManager resource.HostManager , mr * resource.MockResourceMockRecorder , mh * resource.MockHostManagerMockRecorder ) {
916
+ gomock .InOrder (
917
+ mr .HostManager ().Return (hostManager ).Times (1 ),
918
+ mh .Range (gomock .Any ()).Do (func (f func (key , value any ) bool ) {
919
+ f (nil , host )
920
+ }).Return ().Times (1 ),
921
+ )
922
+ },
923
+ expect : func (t * testing.T , host * resource.Host , resp []* commonv2.Host , err error ) {
924
+ assert := assert .New (t )
925
+ assert .NoError (err )
926
+ assert .Equal (len (resp ), 1 )
927
+ assert .EqualValues (resp [0 ], & commonv2.Host {
928
+ Id : mockHostID ,
929
+ Type : uint32 (pkgtypes .HostTypeNormal ),
930
+ Hostname : "foo" ,
931
+ Ip : "127.0.0.1" ,
932
+ Port : 8003 ,
933
+ DownloadPort : mockRawHost .DownloadPort ,
934
+ Cpu : & commonv2.CPU {
935
+ LogicalCount : mockCPU .LogicalCount ,
936
+ PhysicalCount : mockCPU .PhysicalCount ,
937
+ Percent : mockCPU .Percent ,
938
+ ProcessPercent : mockCPU .ProcessPercent ,
939
+ Times : & commonv2.CPUTimes {
940
+ User : mockCPU .Times .User ,
941
+ System : mockCPU .Times .System ,
942
+ Idle : mockCPU .Times .Idle ,
943
+ Nice : mockCPU .Times .Nice ,
944
+ Iowait : mockCPU .Times .Iowait ,
945
+ Irq : mockCPU .Times .Irq ,
946
+ Softirq : mockCPU .Times .Softirq ,
947
+ Steal : mockCPU .Times .Steal ,
948
+ Guest : mockCPU .Times .Guest ,
949
+ GuestNice : mockCPU .Times .GuestNice ,
950
+ },
951
+ },
952
+ Memory : & commonv2.Memory {
953
+ Total : mockMemory .Total ,
954
+ Available : mockMemory .Available ,
955
+ Used : mockMemory .Used ,
956
+ UsedPercent : mockMemory .UsedPercent ,
957
+ ProcessUsedPercent : mockMemory .ProcessUsedPercent ,
958
+ Free : mockMemory .Free ,
959
+ },
960
+ Network : & commonv2.Network {
961
+ TcpConnectionCount : mockNetwork .TCPConnectionCount ,
962
+ UploadTcpConnectionCount : mockNetwork .UploadTCPConnectionCount ,
963
+ Location : & mockNetwork .Location ,
964
+ Idc : & mockNetwork .IDC ,
965
+ DownloadRate : mockNetwork .DownloadRate ,
966
+ DownloadRateLimit : mockNetwork .DownloadRateLimit ,
967
+ UploadRate : mockNetwork .UploadRate ,
968
+ UploadRateLimit : mockNetwork .UploadRateLimit ,
969
+ },
970
+ Disk : & commonv2.Disk {
971
+ Total : mockDisk .Total ,
972
+ Free : mockDisk .Free ,
973
+ Used : mockDisk .Used ,
974
+ UsedPercent : mockDisk .UsedPercent ,
975
+ InodesTotal : mockDisk .InodesTotal ,
976
+ InodesUsed : mockDisk .InodesUsed ,
977
+ InodesFree : mockDisk .InodesFree ,
978
+ InodesUsedPercent : mockDisk .InodesUsedPercent ,
979
+ },
980
+ Build : & commonv2.Build {
981
+ GitVersion : mockBuild .GitVersion ,
982
+ GitCommit : & mockBuild .GitCommit ,
983
+ GoVersion : & mockBuild .GoVersion ,
984
+ Platform : & mockBuild .Platform ,
985
+ },
986
+ })
987
+ },
988
+ },
989
+ }
990
+
991
+ for _ , tc := range tests {
992
+ t .Run (tc .name , func (t * testing.T ) {
993
+ ctl := gomock .NewController (t )
994
+ defer ctl .Finish ()
995
+ scheduling := schedulingmocks .NewMockScheduling (ctl )
996
+ res := resource .NewMockResource (ctl )
997
+ dynconfig := configmocks .NewMockDynconfigInterface (ctl )
998
+ storage := storagemocks .NewMockStorage (ctl )
999
+ hostManager := resource .NewMockHostManager (ctl )
1000
+ host := resource .NewHost (
1001
+ mockRawHost .ID , mockRawHost .IP , mockRawHost .Hostname , mockRawHost .Port , mockRawHost .DownloadPort , mockRawHost .Type ,
1002
+ resource .WithCPU (mockCPU ), resource .WithMemory (mockMemory ), resource .WithNetwork (mockNetwork ), resource .WithDisk (mockDisk ), resource .WithBuild (mockBuild ))
1003
+ svc := NewV2 (& config.Config {Scheduler : mockSchedulerConfig , Metrics : config.MetricsConfig {EnableHost : true }}, res , scheduling , dynconfig , storage )
1004
+
1005
+ tc .mock (host , hostManager , res .EXPECT (), hostManager .EXPECT ())
1006
+ resp , err := svc .ListHosts (context .Background ())
1007
+ tc .expect (t , host , resp .Hosts , err )
1008
+ })
1009
+ }
1010
+ }
1011
+
1012
+ func TestServiceV2_DeleteHost (t * testing.T ) {
1013
+ tests := []struct {
1014
+ name string
1015
+ mock func (host * resource.Host , mockPeer * resource.Peer , hostManager resource.HostManager , mr * resource.MockResourceMockRecorder , mh * resource.MockHostManagerMockRecorder )
1016
+ expect func (t * testing.T , peer * resource.Peer , err error )
1017
+ }{
1018
+ {
1019
+ name : "host not found" ,
1020
+ mock : func (host * resource.Host , mockPeer * resource.Peer , hostManager resource.HostManager , mr * resource.MockResourceMockRecorder , mh * resource.MockHostManagerMockRecorder ) {
1021
+ gomock .InOrder (
1022
+ mr .HostManager ().Return (hostManager ).Times (1 ),
1023
+ mh .Load (gomock .Any ()).Return (nil , false ).Times (1 ),
1024
+ )
1025
+ },
1026
+ expect : func (t * testing.T , peer * resource.Peer , err error ) {
1027
+ assert := assert .New (t )
1028
+ assert .Error (err )
1029
+ },
1030
+ },
1031
+ {
1032
+ name : "host has not peers" ,
1033
+ mock : func (host * resource.Host , mockPeer * resource.Peer , hostManager resource.HostManager , mr * resource.MockResourceMockRecorder , mh * resource.MockHostManagerMockRecorder ) {
1034
+ gomock .InOrder (
1035
+ mr .HostManager ().Return (hostManager ).Times (1 ),
1036
+ mh .Load (gomock .Any ()).Return (host , true ).Times (1 ),
1037
+ )
1038
+ },
1039
+ expect : func (t * testing.T , peer * resource.Peer , err error ) {
1040
+ assert := assert .New (t )
1041
+ assert .NoError (err )
1042
+ },
1043
+ },
1044
+ {
1045
+ name : "peer leaves succeeded" ,
1046
+ mock : func (host * resource.Host , mockPeer * resource.Peer , hostManager resource.HostManager , mr * resource.MockResourceMockRecorder , mh * resource.MockHostManagerMockRecorder ) {
1047
+ host .Peers .Store (mockPeer .ID , mockPeer )
1048
+ mockPeer .FSM .SetState (resource .PeerStatePending )
1049
+ gomock .InOrder (
1050
+ mr .HostManager ().Return (hostManager ).Times (1 ),
1051
+ mh .Load (gomock .Any ()).Return (host , true ).Times (1 ),
1052
+ )
1053
+ },
1054
+ expect : func (t * testing.T , peer * resource.Peer , err error ) {
1055
+ assert := assert .New (t )
1056
+ assert .NoError (err )
1057
+ assert .Equal (peer .FSM .Current (), resource .PeerStateLeave )
1058
+ },
1059
+ },
1060
+ }
1061
+
1062
+ for _ , tc := range tests {
1063
+ t .Run (tc .name , func (t * testing.T ) {
1064
+ ctl := gomock .NewController (t )
1065
+ defer ctl .Finish ()
1066
+ scheduling := schedulingmocks .NewMockScheduling (ctl )
1067
+ res := resource .NewMockResource (ctl )
1068
+ dynconfig := configmocks .NewMockDynconfigInterface (ctl )
1069
+ storage := storagemocks .NewMockStorage (ctl )
1070
+ hostManager := resource .NewMockHostManager (ctl )
1071
+ host := resource .NewHost (
1072
+ mockRawHost .ID , mockRawHost .IP , mockRawHost .Hostname ,
1073
+ mockRawHost .Port , mockRawHost .DownloadPort , mockRawHost .Type )
1074
+ mockTask := resource .NewTask (mockTaskID , mockTaskURL , mockTaskTag , mockTaskApplication , commonv2 .TaskType_STANDARD , mockTaskFilteredQueryParams , mockTaskHeader , mockTaskBackToSourceLimit , resource .WithDigest (mockTaskDigest ), resource .WithPieceLength (mockTaskPieceLength ))
1075
+ mockPeer := resource .NewPeer (mockSeedPeerID , mockTask , host )
1076
+ svc := NewV2 (& config.Config {Scheduler : mockSchedulerConfig , Metrics : config.MetricsConfig {EnableHost : true }}, res , scheduling , dynconfig , storage )
1077
+
1078
+ tc .mock (host , mockPeer , hostManager , res .EXPECT (), hostManager .EXPECT ())
1079
+ tc .expect (t , mockPeer , svc .DeleteHost (context .Background (), & schedulerv2.DeleteHostRequest {HostId : mockHostID }))
1080
+ })
1081
+ }
1082
+ }
1083
+
891
1084
func TestServiceV2_handleRegisterPeerRequest (t * testing.T ) {
892
1085
dgst := mockTaskDigest .String ()
893
1086
0 commit comments