Skip to content

Commit

Permalink
BIGTOP-4363: Add some unit tests for stack core module (#178)
Browse files Browse the repository at this point in the history
  • Loading branch information
xianrenzw authored Feb 18, 2025
1 parent 6c3119c commit 5b61ee7
Show file tree
Hide file tree
Showing 19 changed files with 1,890 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public String getName() {
return NAME;
}

private void addUserAndGroup(Params params) {
protected void addUserAndGroup(Params params) {
String user = params.user();
String group = params.group();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public static Object configurations(String service, String type, String key, Obj
public static Map<String, Object> configurations(String service, String type) {

Map<String, Object> configDataMap = new HashMap<>();
File file = new File(ProjectPathUtils.getAgentCachePath() + CacheFiles.CONFIGURATIONS_INFO);
File file = createFile(ProjectPathUtils.getAgentCachePath() + CacheFiles.CONFIGURATIONS_INFO);
try {
if (file.exists()) {
Map<String, Map<String, Object>> configJson = JsonUtils.readFromFile(file, new TypeReference<>() {});
Expand All @@ -67,7 +67,7 @@ public static List<String> hosts(String componentName) {
public static Map<String, List<String>> hosts() {

Map<String, List<String>> hostJson = new HashMap<>();
File file = new File(ProjectPathUtils.getAgentCachePath() + CacheFiles.HOSTS_INFO);
File file = createFile(ProjectPathUtils.getAgentCachePath() + CacheFiles.HOSTS_INFO);
if (file.exists()) {
hostJson = JsonUtils.readFromFile(file, new TypeReference<>() {});
}
Expand All @@ -77,7 +77,7 @@ public static Map<String, List<String>> hosts() {
public static Map<String, Object> basicInfo() {

Map<String, Object> settings = new HashMap<>();
File file = new File(ProjectPathUtils.getAgentCachePath() + CacheFiles.SETTINGS_INFO);
File file = createFile(ProjectPathUtils.getAgentCachePath() + CacheFiles.SETTINGS_INFO);
if (file.exists()) {
settings = JsonUtils.readFromFile(file, new TypeReference<>() {});
}
Expand All @@ -87,7 +87,7 @@ public static Map<String, Object> basicInfo() {
public static Map<String, String> users() {

Map<String, String> userMap = new HashMap<>();
File file = new File(ProjectPathUtils.getAgentCachePath() + CacheFiles.USERS_INFO);
File file = createFile(ProjectPathUtils.getAgentCachePath() + CacheFiles.USERS_INFO);
if (file.exists()) {
userMap = JsonUtils.readFromFile(file, new TypeReference<>() {});
}
Expand All @@ -101,7 +101,7 @@ public static List<String> packages() {
public static List<RepoInfo> repos() {

List<RepoInfo> repoInfoList = List.of();
File file = new File(ProjectPathUtils.getAgentCachePath() + CacheFiles.REPOS_INFO);
File file = createFile(ProjectPathUtils.getAgentCachePath() + CacheFiles.REPOS_INFO);
if (file.exists()) {
repoInfoList = JsonUtils.readFromFile(file, new TypeReference<>() {});
}
Expand All @@ -111,10 +111,14 @@ public static List<RepoInfo> repos() {
public static ClusterInfo cluster() {

ClusterInfo clusterInfo = new ClusterInfo();
File file = new File(ProjectPathUtils.getAgentCachePath() + CacheFiles.CLUSTER_INFO);
File file = createFile(ProjectPathUtils.getAgentCachePath() + CacheFiles.CLUSTER_INFO);
if (file.exists()) {
clusterInfo = JsonUtils.readFromFile(file, new TypeReference<>() {});
}
return clusterInfo;
}

protected static File createFile(String fileName) {
return new File(fileName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ public static String getUserPrimaryGroup(String user) {
return null;
}

private static ShellResult sudoExecCmd(List<String> params) throws IOException {
protected static ShellResult sudoExecCmd(List<String> params) throws IOException {
if ("root".equals(System.getProperty("user.name"))) {
return ShellExecutor.execCommand(params);
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/*
* 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
*
* https://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.bigtop.manager.stack.core.spi.hook;

import org.apache.bigtop.manager.stack.core.spi.param.Params;
import org.apache.bigtop.manager.stack.core.utils.linux.LinuxAccountUtils;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
public class AddHookTest {

@Mock
private AddHook addHook;

@Mock
private Params params;

@Test
public void testDoBefore() {
doNothing().when(addHook).addUserAndGroup(any());
doCallRealMethod().when(addHook).doBefore(any());
addHook.doBefore(params);
verify(addHook, times(1)).addUserAndGroup(params);
}

@Test
public void testDoAfter() {
doCallRealMethod().when(addHook).doAfter(any());
addHook.doAfter(params);
verify(addHook, never()).addUserAndGroup(params);
}

@Test
public void testGetName() {
doCallRealMethod().when(addHook).getName();
String name = addHook.getName();
assert name.equals("add");
}

@Test
public void testAddUserAndGroup() {
try (MockedStatic<LinuxAccountUtils> linuxAccountUtilsMockedStatic = mockStatic(LinuxAccountUtils.class)) {
when(params.user()).thenReturn("testUser");
when(params.group()).thenReturn("testGroup1");
doCallRealMethod().when(addHook).addUserAndGroup(any());

linuxAccountUtilsMockedStatic
.when(() -> LinuxAccountUtils.userAdd(any(), any()))
.thenAnswer(invocation -> null);
linuxAccountUtilsMockedStatic
.when(() -> LinuxAccountUtils.groupAdd(any()))
.thenAnswer(invocation -> null);

linuxAccountUtilsMockedStatic
.when(() -> LinuxAccountUtils.getUserPrimaryGroup(any()))
.thenReturn("testGroup1");
addHook.addUserAndGroup(params);
linuxAccountUtilsMockedStatic.verify(() -> LinuxAccountUtils.userAdd(any(), any()), never());

linuxAccountUtilsMockedStatic
.when(() -> LinuxAccountUtils.getUserPrimaryGroup(any()))
.thenReturn("testGroup2");
addHook.addUserAndGroup(params);
linuxAccountUtilsMockedStatic.verify(() -> LinuxAccountUtils.userAdd(any(), any()), times(1));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* 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
*
* https://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.bigtop.manager.stack.core.spi.hook;

import org.apache.bigtop.manager.stack.core.spi.param.Params;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

@ExtendWith(MockitoExtension.class)
public class RestartHookTest {

@Mock
private RestartHook restartHook;

@Mock
private Params params;

@Test
public void testDoBefore() {
doCallRealMethod().when(restartHook).doBefore(any());
restartHook.doBefore(params);
verify(restartHook, times(1)).doBefore(params);
}

@Test
public void testDoAfter() {
doCallRealMethod().when(restartHook).doAfter(any());
restartHook.doAfter(params);
verify(restartHook, times(1)).doAfter(params);
}

@Test
public void testGetName() {
doCallRealMethod().when(restartHook).getName();
String name = restartHook.getName();
assert name.equals("restart");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* 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
*
* https://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.bigtop.manager.stack.core.spi.hook;

import org.apache.bigtop.manager.stack.core.spi.param.Params;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

@ExtendWith(MockitoExtension.class)
public class StartHookTest {

@Mock
private StartHook startHook;

@Mock
private Params params;

@Test
public void testDoBefore() {
doCallRealMethod().when(startHook).doBefore(any());
startHook.doBefore(params);
verify(startHook, times(1)).doBefore(params);
}

@Test
public void testDoAfter() {
doCallRealMethod().when(startHook).doAfter(any());
startHook.doAfter(params);
verify(startHook, times(1)).doAfter(params);
}

@Test
public void testGetName() {
doCallRealMethod().when(startHook).getName();
String name = startHook.getName();
assert name.equals("start");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* 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
*
* https://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.bigtop.manager.stack.core.spi.hook;

import org.apache.bigtop.manager.stack.core.spi.param.Params;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

@ExtendWith(MockitoExtension.class)
public class StopHookTest {

@Mock
private StopHook stopHook;

@Mock
private Params params;

@Test
public void testDoBefore() {
doCallRealMethod().when(stopHook).doBefore(any());
stopHook.doBefore(params);
verify(stopHook, times(1)).doBefore(params);
}

@Test
public void testDoAfter() {
doCallRealMethod().when(stopHook).doAfter(any());
stopHook.doAfter(params);
verify(stopHook, times(1)).doAfter(params);
}

@Test
public void testGetName() {
doCallRealMethod().when(stopHook).getName();
String name = stopHook.getName();
assert name.equals("stop");
}
}
Loading

0 comments on commit 5b61ee7

Please sign in to comment.