blob: f865b4e2aa577977ddaa00dec2e87db84da282ae [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.cli.call.node.status;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalToIgnoringCase;
import static org.hamcrest.Matchers.is;
import static org.mockserver.model.HttpRequest.request;
import static org.mockserver.model.HttpResponse.response;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.stream.Stream;
import org.apache.ignite.cli.core.call.CallOutput;
import org.apache.ignite.cli.core.call.StatusCallInput;
import org.apache.ignite.rest.client.model.NodeState;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.mockserver.integration.ClientAndServer;
class NodeStatusCallTest {
ClientAndServer clientAndServer;
ObjectMapper objectMapper;
String url;
NodeStatusCall call;
String nodeName;
public static Stream<Arguments> nodeStates() {
return Arrays.stream(org.apache.ignite.rest.client.model.State.values()).map(Arguments::of);
}
@BeforeEach
void setUp() {
nodeName = "testnode";
objectMapper = new ObjectMapper();
call = new NodeStatusCall();
clientAndServer = ClientAndServer.startClientAndServer(0);
url = "http://localhost:" + clientAndServer.getPort();
}
@ParameterizedTest
@MethodSource("nodeStates")
@DisplayName("Should return node status")
void nodeStatusStarting(org.apache.ignite.rest.client.model.State givenNodeState) {
// Given
nodeState(givenNodeState);
// When call node status
CallOutput<NodeStatus> output = call.execute(new StatusCallInput(url));
// Then output is successful
assertThat(output.hasError(), is(false));
// And body has correct node name and status
assertThat(output.body().name(), is(nodeName));
assertThat(output.body().state().stateName(), is(equalToIgnoringCase(givenNodeState.getValue())));
}
private void nodeState(org.apache.ignite.rest.client.model.State state) {
try {
clientAndServer
.when(request()
.withMethod("GET")
.withPath("/management/v1/node/state"))
.respond(response(objectMapper.writeValueAsString(new NodeState().name(nodeName).state(state))));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
}