• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 The gRPC Authors
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package io.grpc.rls;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import io.grpc.ConnectivityState;
22 import org.junit.Test;
23 import org.junit.runner.RunWith;
24 import org.junit.runners.JUnit4;
25 
26 @RunWith(JUnit4.class)
27 public class SubchannelStateManagerImplTest {
28 
29   private SubchannelStateManager subchannelStateManager = new SubchannelStateManagerImpl();
30 
31   @Test
getState_unknown()32   public void getState_unknown() {
33     assertThat(subchannelStateManager.getState("unknown")).isNull();
34   }
35 
36   @Test
getState_known()37   public void getState_known() {
38     subchannelStateManager.updateState("known", ConnectivityState.TRANSIENT_FAILURE);
39 
40     assertThat(subchannelStateManager.getState("known"))
41         .isEqualTo(ConnectivityState.TRANSIENT_FAILURE);
42   }
43 
44   @Test
getState_shutdown_unregistersSubchannel()45   public void getState_shutdown_unregistersSubchannel() {
46     subchannelStateManager.updateState("known", ConnectivityState.TRANSIENT_FAILURE);
47 
48     assertThat(subchannelStateManager.getState("known"))
49         .isEqualTo(ConnectivityState.TRANSIENT_FAILURE);
50 
51     subchannelStateManager.updateState("known", ConnectivityState.SHUTDOWN);
52 
53     assertThat(subchannelStateManager.getState("known")).isNull();
54   }
55 
56   @Test
getAggregatedStatus_none()57   public void getAggregatedStatus_none() {
58     assertThat(subchannelStateManager.getAggregatedState())
59         .isEqualTo(ConnectivityState.IDLE);
60   }
61 
62   @Test
getAggregatedStatus_single()63   public void getAggregatedStatus_single() {
64     for (ConnectivityState value : ConnectivityState.values()) {
65       if (value == ConnectivityState.SHUTDOWN) {
66         continue;
67       }
68       SubchannelStateManager stateManager = new SubchannelStateManagerImpl();
69 
70       stateManager.updateState("foo", value);
71 
72       assertThat(stateManager.getAggregatedState()).isEqualTo(value);
73     }
74   }
75 
76   @Test
getAggregateState_multipleSubchannels()77   public void getAggregateState_multipleSubchannels() {
78     subchannelStateManager.updateState("channel1", ConnectivityState.TRANSIENT_FAILURE);
79     subchannelStateManager.updateState("channel2", ConnectivityState.READY);
80 
81     assertThat(subchannelStateManager.getState("channel1"))
82         .isEqualTo(ConnectivityState.TRANSIENT_FAILURE);
83     assertThat(subchannelStateManager.getState("channel2"))
84         .isEqualTo(ConnectivityState.READY);
85 
86     assertThat(subchannelStateManager.getAggregatedState())
87         .isEqualTo(ConnectivityState.READY);
88 
89     subchannelStateManager.updateState("channel2", ConnectivityState.SHUTDOWN);
90 
91     assertThat(subchannelStateManager.getAggregatedState())
92         .isEqualTo(ConnectivityState.TRANSIENT_FAILURE);
93 
94     subchannelStateManager.updateState("channel1", ConnectivityState.CONNECTING);
95     assertThat(subchannelStateManager.getAggregatedState())
96         .isEqualTo(ConnectivityState.TRANSIENT_FAILURE);
97 
98     subchannelStateManager.updateState("channel1", ConnectivityState.READY);
99     assertThat(subchannelStateManager.getAggregatedState())
100         .isEqualTo(ConnectivityState.READY);
101   }
102 }
103