This commit is contained in:
68
src/test/java/com/codechecker/cache/key/RedisKeyResolverTest.java
vendored
Normal file
68
src/test/java/com/codechecker/cache/key/RedisKeyResolverTest.java
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
package com.codechecker.cache.key;
|
||||
|
||||
import com.codechecker.cache.schema.SourceIndex;
|
||||
import com.github.javaparser.StaticJavaParser;
|
||||
import com.github.javaparser.ast.CompilationUnit;
|
||||
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
|
||||
import com.github.javaparser.ast.expr.Expression;
|
||||
import com.github.javaparser.ast.expr.MethodCallExpr;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class RedisKeyResolverTest {
|
||||
|
||||
@Test
|
||||
void resolvesStringFormatWithConstant() {
|
||||
String source = ""
|
||||
+ "package demo;\n"
|
||||
+ "public class AttendanceService {\n"
|
||||
+ " private static final String ATTENDANCE_BASE_SETTING_CACHE_KEY = "
|
||||
+ "\"fbt:attendance:base_setting:cache:%s\";\n"
|
||||
+ " public void save(String tenantId) {\n"
|
||||
+ " String key = String.format(ATTENDANCE_BASE_SETTING_CACHE_KEY, tenantId);\n"
|
||||
+ " }\n"
|
||||
+ "}\n";
|
||||
|
||||
SourceIndex index = new SourceIndex();
|
||||
index.addSource(source);
|
||||
CompilationUnit cu = StaticJavaParser.parse(source);
|
||||
ClassOrInterfaceDeclaration clazz = cu.getType(0).asClassOrInterfaceDeclaration();
|
||||
MethodCallExpr formatCall = cu.findAll(MethodCallExpr.class).stream()
|
||||
.filter(m -> "format".equals(m.getNameAsString()))
|
||||
.findFirst()
|
||||
.orElseThrow(IllegalStateException::new);
|
||||
|
||||
String pattern = new RedisKeyResolver(index).resolve(
|
||||
formatCall, clazz, index.get("demo.AttendanceService"));
|
||||
assertEquals("fbt:attendance:base_setting:cache:*", pattern);
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolvesConstantConcatAndBuildMethod() {
|
||||
String source = ""
|
||||
+ "package jnpf.util;\n"
|
||||
+ "public class TenantDbContentCacheHelper {\n"
|
||||
+ " private static final String CACHE_KEY_PREFIX = \"tenant:db:content:\";\n"
|
||||
+ " public String buildCacheKey(String encode) {\n"
|
||||
+ " return CACHE_KEY_PREFIX + encode;\n"
|
||||
+ " }\n"
|
||||
+ " public void cache(String encode) {\n"
|
||||
+ " String key = buildCacheKey(encode);\n"
|
||||
+ " }\n"
|
||||
+ "}\n";
|
||||
|
||||
SourceIndex index = new SourceIndex();
|
||||
index.addSource(source);
|
||||
CompilationUnit cu = StaticJavaParser.parse(source);
|
||||
ClassOrInterfaceDeclaration clazz = cu.getType(0).asClassOrInterfaceDeclaration();
|
||||
MethodCallExpr buildCall = cu.findAll(MethodCallExpr.class).stream()
|
||||
.filter(m -> "buildCacheKey".equals(m.getNameAsString()))
|
||||
.findFirst()
|
||||
.orElseThrow(IllegalStateException::new);
|
||||
|
||||
String pattern = new RedisKeyResolver(index).resolve(
|
||||
buildCall, clazz, index.get("jnpf.util.TenantDbContentCacheHelper"));
|
||||
assertEquals("tenant:db:content:*", pattern);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user