Skip to content

Commit 8fc5740

Browse files
authored
补全成熟度分级case (#120)
* 增加分级 * 增加case
1 parent e43cb8b commit 8fc5740

File tree

25 files changed

+692
-9
lines changed

25 files changed

+692
-9
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.sast.astbenchmark.case_language_maturity.completeness.asynchronous_tracing.promise_callback_await;
2+
3+
import org.springframework.web.bind.annotation.PostMapping;
4+
import org.springframework.web.bind.annotation.RequestMapping;
5+
import org.springframework.web.bind.annotation.RequestParam;
6+
import org.springframework.web.bind.annotation.RestController;
7+
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
import java.util.concurrent.CompletableFuture;
11+
import java.util.concurrent.atomic.AtomicReference;
12+
13+
/**
14+
* Introduction 异步跟踪完整度-promise_callback_await-CompletableFuture
15+
* Level 3
16+
* Date 2024-12-17
17+
*/
18+
// evaluation information start
19+
// real case = true
20+
// evaluation project = 完整度->异步跟踪完整度->promise_callback_await->CompletableFuture
21+
// bind_url = completeness/asynchronous_tracing/promise_callback_await/CompletableFuture_001_T/{cmd}
22+
// evaluation information end
23+
@RestController
24+
@RequestMapping("completeness/asynchronous_tracing/promise_callback_await")
25+
public class CompletableFuture_001_T {
26+
@PostMapping(value = "CompletableFuture_001_T/{cmd}")
27+
public Map<String, Object> testcase(@RequestParam String cmd) {
28+
Map<String, Object> modelMap = new HashMap<>();
29+
try {
30+
AtomicReference<String> result = new AtomicReference<>(cmd);
31+
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
32+
// 异步任务
33+
try {
34+
Thread.sleep(2000);
35+
} catch (InterruptedException e) {
36+
throw new RuntimeException(e);
37+
}
38+
});
39+
40+
future.thenRun(() -> {
41+
try {
42+
result.set("clean");
43+
} catch (Exception e) {
44+
modelMap.put("status", "error");
45+
}
46+
});
47+
Runtime.getRuntime().exec(result.get());
48+
future.join();
49+
modelMap.put("status", "success");
50+
} catch (Exception e) {
51+
modelMap.put("status", "error");
52+
}
53+
return modelMap;
54+
}
55+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.sast.astbenchmark.case_language_maturity.completeness.asynchronous_tracing.promise_callback_await;
2+
3+
import org.springframework.web.bind.annotation.PostMapping;
4+
import org.springframework.web.bind.annotation.RequestMapping;
5+
import org.springframework.web.bind.annotation.RequestParam;
6+
import org.springframework.web.bind.annotation.RestController;
7+
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
import java.util.concurrent.CompletableFuture;
11+
import java.util.concurrent.atomic.AtomicReference;
12+
13+
/**
14+
* Introduction 异步跟踪完整度-promise_callback_await-CompletableFuture
15+
* Level 3
16+
* Date 2024-12-17
17+
*/
18+
// evaluation information start
19+
// real case = true
20+
// evaluation project = 完整度->异步跟踪完整度->promise_callback_await->CompletableFuture
21+
// bind_url = completeness/asynchronous_tracing/promise_callback_await/CompletableFuture_002_F/{cmd}
22+
// evaluation information end
23+
@RestController
24+
@RequestMapping("completeness/asynchronous_tracing/promise_callback_await")
25+
public class CompletableFuture_002_F {
26+
@PostMapping(value = "CompletableFuture_002_F/{cmd}")
27+
public Map<String, Object> testcase(@RequestParam String cmd) {
28+
Map<String, Object> modelMap = new HashMap<>();
29+
try {
30+
AtomicReference<String> result = new AtomicReference<>(cmd);
31+
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
32+
// 异步任务
33+
try {
34+
Thread.sleep(2000);
35+
} catch (InterruptedException e) {
36+
throw new RuntimeException(e);
37+
}
38+
});
39+
40+
future.thenRun(() -> {
41+
try {
42+
result.set("clean");
43+
} catch (Exception e) {
44+
modelMap.put("status", "error");
45+
}
46+
});
47+
future.join();
48+
Runtime.getRuntime().exec(result.get());
49+
modelMap.put("status", "success");
50+
} catch (Exception e) {
51+
modelMap.put("status", "error");
52+
}
53+
return modelMap;
54+
}
55+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.sast.astbenchmark.case_language_maturity.completeness.asynchronous_tracing.promise_callback_await;
2+
3+
import org.springframework.web.bind.annotation.PostMapping;
4+
import org.springframework.web.bind.annotation.RequestMapping;
5+
import org.springframework.web.bind.annotation.RequestParam;
6+
import org.springframework.web.bind.annotation.RestController;
7+
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
import java.util.concurrent.CompletableFuture;
11+
import java.util.concurrent.ExecutorService;
12+
import java.util.concurrent.Executors;
13+
import java.util.concurrent.atomic.AtomicReference;
14+
15+
/**
16+
* Introduction 异步跟踪完整度-promise_callback_await-CompletableFuture
17+
* Level 3
18+
* Date 2024-12-17
19+
*/
20+
// evaluation information start
21+
// real case = true
22+
// evaluation project = 完整度->异步跟踪完整度->promise_callback_await->CompletableFuture
23+
// bind_url = completeness/asynchronous_tracing/promise_callback_await/CompletableFuture_003_T/{cmd}
24+
// evaluation information end
25+
@RestController
26+
@RequestMapping("completeness/asynchronous_tracing/promise_callback_await")
27+
public class CompletableFuture_003_T {
28+
private final ExecutorService executorService = Executors.newFixedThreadPool(3);
29+
@PostMapping(value = "CompletableFuture_003_T/{cmd}")
30+
public Map<String, Object> testcase(@RequestParam String cmd) {
31+
Map<String, Object> modelMap = new HashMap<>();
32+
AtomicReference<String> result = new AtomicReference<>(cmd);
33+
try {
34+
// 使用CompletableFuture进行异步任务
35+
CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {
36+
// 异步任务开始
37+
try {
38+
Thread.sleep(2000); // 模拟长时间任务
39+
return "Task completed with input: " + result.get();
40+
} catch (InterruptedException e) {
41+
throw new RuntimeException(e);
42+
}
43+
}, executorService).thenApply(output -> {
44+
// 处理结果
45+
return result.get();
46+
}).thenAccept(notCleanedResult -> {
47+
// 最终操作
48+
try {
49+
Runtime.getRuntime().exec(notCleanedResult);
50+
} catch (Exception e) {
51+
modelMap.put("status", "error");
52+
}
53+
});
54+
55+
// 等待链式调用完成
56+
future.join();
57+
modelMap.put("status", "success");
58+
59+
} catch (Exception e) {
60+
modelMap.put("status", "error");
61+
} finally {
62+
executorService.shutdown();
63+
}
64+
return modelMap;
65+
}
66+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.sast.astbenchmark.case_language_maturity.completeness.asynchronous_tracing.promise_callback_await;
2+
3+
import org.springframework.web.bind.annotation.PostMapping;
4+
import org.springframework.web.bind.annotation.RequestMapping;
5+
import org.springframework.web.bind.annotation.RequestParam;
6+
import org.springframework.web.bind.annotation.RestController;
7+
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
import java.util.concurrent.CompletableFuture;
11+
import java.util.concurrent.ExecutorService;
12+
import java.util.concurrent.Executors;
13+
import java.util.concurrent.atomic.AtomicReference;
14+
15+
/**
16+
* Introduction 异步跟踪完整度-promise_callback_await-CompletableFuture
17+
* Level 3
18+
* Date 2024-12-17
19+
*/
20+
// evaluation information start
21+
// real case = true
22+
// evaluation project = 完整度->异步跟踪完整度->promise_callback_await->CompletableFuture
23+
// bind_url = completeness/asynchronous_tracing/promise_callback_await/CompletableFuture_004_F/{cmd}
24+
// evaluation information end
25+
@RestController
26+
@RequestMapping("completeness/asynchronous_tracing/promise_callback_await")
27+
public class CompletableFuture_004_F {
28+
private final ExecutorService executorService = Executors.newFixedThreadPool(3);
29+
@PostMapping(value = "CompletableFuture_004_F/{cmd}")
30+
public Map<String, Object> testcase(@RequestParam String cmd) {
31+
Map<String, Object> modelMap = new HashMap<>();
32+
AtomicReference<String> result = new AtomicReference<>(cmd);
33+
try {
34+
// 使用CompletableFuture进行异步任务
35+
CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {
36+
// 异步任务开始
37+
try {
38+
Thread.sleep(2000); // 模拟长时间任务
39+
return "Task completed with input: " + result.get();
40+
} catch (InterruptedException e) {
41+
throw new RuntimeException(e);
42+
}
43+
}, executorService).thenApply(output -> {
44+
// 处理结果
45+
result.set("clean");
46+
return result.get();
47+
}).thenAccept(cleanedResult -> {
48+
// 最终操作
49+
try {
50+
Runtime.getRuntime().exec(cleanedResult);
51+
} catch (Exception e) {
52+
modelMap.put("status", "error");
53+
}
54+
});
55+
56+
// 等待链式调用完成
57+
future.join();
58+
modelMap.put("status", "success");
59+
60+
} catch (Exception e) {
61+
modelMap.put("status", "error");
62+
} finally {
63+
executorService.shutdown();
64+
}
65+
return modelMap;
66+
}
67+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"promise_callback_await": [
3+
{
4+
"evaluation item": "完整度->异步跟踪完整度->promise_callback_await->CompletableFuture",
5+
"compose": "CompletableFuture_001_T.java && !CompletableFuture_002_F.java",
6+
"level": "3"
7+
},
8+
{
9+
"evaluation item": "完整度->异步跟踪完整度->promise_callback_await->CompletableFuture",
10+
"compose": "CompletableFuture_003_T.java && !CompletableFuture_004_F.java",
11+
"level": "3"
12+
}
13+
]
14+
}

sast-java/src/main/java/com/sast/astbenchmark/case_language_maturity/completeness/single_app_tracing/cross_module/config.json

Lines changed: 0 additions & 5 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"cross_directory": [
3+
{
4+
"evaluation item": "完整度->基础跟踪能力->污点对象完整度->跨模块->跨目录",
5+
"compose": "(cross_directory_001_T_a.java || cross_directory_001_T_B.java) && !(cross_directory_002_F_a.java || cross_directory_002_F_b.java)",
6+
"level": "2"
7+
}
8+
]
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.sast.astbenchmark.case_language_maturity.completeness.single_app_tracing.cross_module.cross_directory.cross_directory_001_T.A;
2+
3+
import com.sast.astbenchmark.case_language_maturity.completeness.single_app_tracing.cross_module.cross_directory.cross_directory_001_T.B.cross_directory_001_T_b;
4+
import org.springframework.web.bind.annotation.PostMapping;
5+
import org.springframework.web.bind.annotation.RequestMapping;
6+
import org.springframework.web.bind.annotation.RequestParam;
7+
import org.springframework.web.bind.annotation.RestController;
8+
9+
import java.util.Map;
10+
11+
/**
12+
* Introduction 完整度->基础跟踪能力->污点对象完整度->跨模块->跨目录
13+
* Level 2
14+
* Date 2024-05-09
15+
*/
16+
// evaluation information start
17+
// real case = true
18+
// evaluation item = 完整度->基础跟踪能力->污点对象完整度->跨模块->跨目录
19+
// bind_url = completeness/single_app_tracing/cross_module/cross_directory/cross_directory_001_T/A/cross_directory_001_T_a
20+
// evaluation information end
21+
22+
@RestController()
23+
@RequestMapping("completeness/single_app_tracing/cross_module/cross_directory/cross_directory_001_T/A")
24+
public class cross_directory_001_T_a {
25+
@PostMapping("cross_directory_001_T_a")
26+
public Map<String, Object> aTaintCase0110(@RequestParam("cmd") String cmd) {
27+
return new cross_directory_001_T_b().cross_directory_001_T_b(cmd);
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.sast.astbenchmark.case_language_maturity.completeness.single_app_tracing.cross_module.cross_directory.cross_directory_001_T.B;
2+
3+
import org.springframework.web.bind.annotation.RequestMapping;
4+
import org.springframework.web.bind.annotation.RestController;
5+
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
9+
/**
10+
* Introduction 完整度->基础跟踪能力->污点对象完整度->跨模块->跨目录
11+
* Level 2
12+
* Date 2024-05-09
13+
*/
14+
// evaluation information start
15+
// real case = true
16+
// evaluation item = 完整度->基础跟踪能力->污点对象完整度->跨模块->跨目录
17+
// bind_url = completeness/single_app_tracing/cross_module/cross_directory/cross_directory_001_T/B/cross_directory_001_T_b
18+
// evaluation information end
19+
20+
@RestController()
21+
@RequestMapping("completeness/single_app_tracing/cross_module/cross_directory/cross_directory_001_T/B")
22+
public class cross_directory_001_T_b {
23+
public Map<String, Object> cross_directory_001_T_b(String cmd) {
24+
Map<String, Object> modelMap = new HashMap<>();
25+
try {
26+
Runtime.getRuntime().exec(cmd);
27+
modelMap.put("status", "success");
28+
} catch (Exception e) {
29+
modelMap.put("status", "error");
30+
}
31+
return modelMap;
32+
}
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.sast.astbenchmark.case_language_maturity.completeness.single_app_tracing.cross_module.cross_directory.cross_directory_002_F.A;
2+
3+
import com.sast.astbenchmark.case_language_maturity.completeness.single_app_tracing.cross_module.cross_directory.cross_directory_002_F.B.cross_directory_002_F_b;
4+
import org.springframework.web.bind.annotation.PostMapping;
5+
import org.springframework.web.bind.annotation.RequestMapping;
6+
import org.springframework.web.bind.annotation.RequestParam;
7+
import org.springframework.web.bind.annotation.RestController;
8+
9+
import java.util.Map;
10+
11+
/**
12+
* Introduction 完整度->基础跟踪能力->污点对象完整度->跨模块->跨目录
13+
* Level 2
14+
* Date 2024-05-09
15+
*/
16+
// evaluation information start
17+
// real case = false
18+
// evaluation item = 完整度->基础跟踪能力->污点对象完整度->跨模块->跨目录
19+
// bind_url = completeness/single_app_tracing/cross_module/cross_directory/cross_directory_002_F/A/cross_directory_002_F_a
20+
// evaluation information end
21+
22+
@RestController()
23+
@RequestMapping("completeness/single_app_tracing/cross_module/cross_directory/cross_directory_002_F/A")
24+
public class cross_directory_002_F_a {
25+
@PostMapping("cross_directory_002_F_a")
26+
public Map<String, Object> aTaintCase0110(@RequestParam("cmd") String cmd) {
27+
return new cross_directory_002_F_b().cross_directory_002_F_b(cmd);
28+
}
29+
}

0 commit comments

Comments
 (0)