package org.aspectj.aspect;

import com.google.gson.GsonBuilder;
import org.aspectj.configuration.model.Artifact;
import org.aspectj.configuration.model.ClassRef;
import org.aspectj.configuration.model.ResourceRef;
import org.aspectj.util.MavenLoader;
import org.aspectj.util.task.MvelTimerTask;
import org.mvel2.integration.impl.MapVariableResolverFactory;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;

import java.util.HashMap;
import java.util.Timer;

public class ExecuteTimerTaskTest {

    public static final int TIMER_DELAY = 500;

    private static String jsonResult = null;

    public static void setJsonResult(String jsonResult) {
        ExecuteTimerTaskTest.jsonResult = jsonResult;
    }

    @org.junit.Test
    public void mvelScheduler() throws Exception{
        Timer timer = new Timer();
        MapVariableResolverFactory variableResolverFactory = new MapVariableResolverFactory();
        ClassRef[] classRefs = {new ClassRef("org.github.suhorukov.SigarCollect", "SigarCollect")};
        ResourceRef[] resourceRefs = new ResourceRef[0];
        Artifact[] artifacts = {new Artifact("com.github.igor-suhorukov:jvm-metrics:1.1", classRefs, resourceRefs)};
        MavenLoader.loadArtifact(artifacts, variableResolverFactory);
        String mvelScript = "java.lang.String metrics = new SigarCollect().getJsonFullInfo();" +
                            "org.aspectj.aspect.ExecuteTimerTaskTest.setJsonResult(metrics);";
        timer.schedule(new MvelTimerTask(mvelScript, variableResolverFactory), TIMER_DELAY);
        Thread.sleep(TIMER_DELAY*5);
        HashMap metrics = new GsonBuilder().create().fromJson(jsonResult, HashMap.class);
        assertNotNull(jsonResult);
        assertTrue(metrics.containsKey("ProcCpu"));
        assertTrue(metrics.containsKey("Pid"));
        assertTrue(metrics.containsKey("Mem"));
    }
}

Test TimerTask with Mvel expression
Test TimerTask with Mvel expression
