(t *testing.T)
| 1015 | } |
| 1016 | |
| 1017 | func TestRing_GetReplicationSetForOperation(t *testing.T) { |
| 1018 | now := time.Now() |
| 1019 | gen := initTokenGenerator(t) |
| 1020 | |
| 1021 | tests := map[string]struct { |
| 1022 | ringInstances map[string]InstanceDesc |
| 1023 | ringHeartbeatTimeout time.Duration |
| 1024 | ringReplicationFactor int |
| 1025 | expectedErrForRead error |
| 1026 | expectedSetForRead []string |
| 1027 | expectedErrForWrite error |
| 1028 | expectedSetForWrite []string |
| 1029 | expectedErrForReporting error |
| 1030 | expectedSetForReporting []string |
| 1031 | }{ |
| 1032 | "should return error on empty ring": { |
| 1033 | ringInstances: nil, |
| 1034 | ringHeartbeatTimeout: time.Minute, |
| 1035 | ringReplicationFactor: 1, |
| 1036 | expectedErrForRead: ErrEmptyRing, |
| 1037 | expectedErrForWrite: ErrEmptyRing, |
| 1038 | expectedErrForReporting: ErrEmptyRing, |
| 1039 | }, |
| 1040 | "should succeed on all healthy instances and RF=1": { |
| 1041 | ringInstances: map[string]InstanceDesc{ |
| 1042 | "instance-1": {Addr: "127.0.0.1", State: ACTIVE, Timestamp: now.Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1043 | "instance-2": {Addr: "127.0.0.2", State: ACTIVE, Timestamp: now.Add(-10 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1044 | "instance-3": {Addr: "127.0.0.3", State: ACTIVE, Timestamp: now.Add(-20 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1045 | "instance-4": {Addr: "127.0.0.4", State: ACTIVE, Timestamp: now.Add(-30 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1046 | "instance-5": {Addr: "127.0.0.5", State: ACTIVE, Timestamp: now.Add(-40 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1047 | }, |
| 1048 | ringHeartbeatTimeout: time.Minute, |
| 1049 | ringReplicationFactor: 1, |
| 1050 | expectedSetForRead: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"}, |
| 1051 | expectedSetForWrite: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"}, |
| 1052 | expectedSetForReporting: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"}, |
| 1053 | }, |
| 1054 | "should succeed on instances with old timestamps but long heartbeat timeout": { |
| 1055 | ringInstances: map[string]InstanceDesc{ |
| 1056 | "instance-1": {Addr: "127.0.0.1", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1057 | "instance-2": {Addr: "127.0.0.2", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1058 | "instance-3": {Addr: "127.0.0.3", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1059 | "instance-4": {Addr: "127.0.0.4", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1060 | "instance-5": {Addr: "127.0.0.5", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1061 | }, |
| 1062 | ringHeartbeatTimeout: time.Hour, |
| 1063 | ringReplicationFactor: 1, |
| 1064 | expectedSetForRead: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"}, |
| 1065 | expectedSetForWrite: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"}, |
| 1066 | expectedSetForReporting: []string{"127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4", "127.0.0.5"}, |
| 1067 | }, |
| 1068 | "should fail on 1 unhealthy instance and RF=1": { |
| 1069 | ringInstances: map[string]InstanceDesc{ |
| 1070 | "instance-1": {Addr: "127.0.0.1", State: ACTIVE, Timestamp: now.Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1071 | "instance-2": {Addr: "127.0.0.2", State: ACTIVE, Timestamp: now.Add(-10 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1072 | "instance-3": {Addr: "127.0.0.3", State: ACTIVE, Timestamp: now.Add(-20 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1073 | "instance-4": {Addr: "127.0.0.4", State: ACTIVE, Timestamp: now.Add(-30 * time.Second).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
| 1074 | "instance-5": {Addr: "127.0.0.5", State: ACTIVE, Timestamp: now.Add(-2 * time.Minute).Unix(), Tokens: gen.GenerateTokens(128, nil)}, |
nothing calls this directly
no test coverage detected