All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alicp.jetcache.test.anno.TestUtil Maven / Gradle / Ivy

The newest version!
/**
 * Created on  13-09-23 09:36
 */
package com.alicp.jetcache.test.anno;

import com.alicp.jetcache.anno.CacheConsts;
import com.alicp.jetcache.anno.support.GlobalCacheConfig;
import com.alicp.jetcache.anno.support.JetCacheBaseBeans;
import com.alicp.jetcache.anno.support.SpringConfigProvider;
import com.alicp.jetcache.embedded.EmbeddedCacheBuilder;
import com.alicp.jetcache.embedded.LinkedHashMapCacheBuilder;
import com.alicp.jetcache.external.MockRemoteCacheBuilder;
import com.alicp.jetcache.support.Fastjson2KeyConvertor;
import com.alicp.jetcache.support.KryoValueDecoder;
import com.alicp.jetcache.support.KryoValueEncoder;
import junit.framework.AssertionFailedError;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.function.Supplier;

/**
 * @author huangli
 */
public class TestUtil {
    public static GlobalCacheConfig createGloableConfig() {
        Map localBuilders = new HashMap();
        EmbeddedCacheBuilder localBuilder = LinkedHashMapCacheBuilder.createLinkedHashMapCacheBuilder();
        localBuilder.setKeyConvertor(Fastjson2KeyConvertor.INSTANCE);
        localBuilders.put(CacheConsts.DEFAULT_AREA, localBuilder);
        localBuilders.put("A1", localBuilder);

        Map remoteBuilders = new HashMap();

        MockRemoteCacheBuilder remoteBuilder = MockRemoteCacheBuilder.createMockRemoteCacheBuilder();
        remoteBuilder.setKeyConvertor(Fastjson2KeyConvertor.INSTANCE);
        remoteBuilder.setValueEncoder(KryoValueEncoder.INSTANCE);
        remoteBuilder.setValueDecoder(KryoValueDecoder.INSTANCE);
        remoteBuilder.setBroadcastChannel("mockBroadcastChannel");
        remoteBuilders.put(CacheConsts.DEFAULT_AREA, remoteBuilder);

        remoteBuilder = MockRemoteCacheBuilder.createMockRemoteCacheBuilder();
        remoteBuilder.setKeyConvertor(Fastjson2KeyConvertor.INSTANCE);
        remoteBuilder.setValueEncoder(KryoValueEncoder.INSTANCE);
        remoteBuilder.setValueDecoder(KryoValueDecoder.INSTANCE);
        remoteBuilder.setBroadcastChannel("mockBroadcastChannel_A1");
        remoteBuilders.put("A1", remoteBuilder);

        GlobalCacheConfig globalCacheConfig = new GlobalCacheConfig();
        globalCacheConfig.setLocalCacheBuilders(localBuilders);
        globalCacheConfig.setRemoteCacheBuilders(remoteBuilders);

        return globalCacheConfig;
    }

    public static SpringConfigProvider createConfigProvider() {
        JetCacheBaseBeans baseBeans = new JetCacheBaseBeans();
        SpringConfigProvider configProvider = baseBeans.springConfigProvider(
                null, createGloableConfig(), null, null, null);
        baseBeans.cacheManager(configProvider);
        return configProvider;
    }

    public static void waitUtil(Supplier condition) {
        waitUtil(Boolean.TRUE, condition);
    }

    public static void waitUtil(Object expectValue, Supplier actual) {
        waitUtil(expectValue, actual, 5000);
    }

    public static void waitUtil(Object expectValue, Supplier actual, long timeoutMillis) {
        long start = System.nanoTime();
        long deadline = start + timeoutMillis * 1000 * 1000;
        Object obj = actual.get();
        if (Objects.equals(expectValue, obj)) {
            return;
        }
        int waitCount = 0;
        while (deadline - System.nanoTime() > 0) {
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            waitCount++;
            obj = actual.get();
            if(Objects.equals(expectValue, obj)){
                return;
            }
        }
        throw new AssertionFailedError("expect: " + expectValue + ", actual:" + obj + ", timeout="
                + timeoutMillis + "ms, cost=" + (System.nanoTime() - start) / 1000 / 1000 + "ms, waitCount=" + waitCount);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy