简体   繁体   中英

java.lang.IllegalStateException: Missing the '-javaagent' JVM argument. Make sure you run the tests with the Quasar java agent attached to your JVM

When trying to run test for CORDA the given Test case getting the following error. I am using JDK 1.8., Intellij IDEA on Windows 10. Even Though I have mentioned the the Quasar.jar in VM options.

RUN >> Edit Configurations >> Junit>> Required Test Class >>VM options:-ea -javaagent:lib\quasar.jar enter image description here

package com.template;

import com.google.common.collect.ImmutableList;
import com.template.contracts.MetalContract;
import com.template.flows.Responder;
import com.template.states.MetalState;
import net.corda.core.concurrent.CordaFuture;
import net.corda.core.contracts.Command;
import net.corda.core.contracts.TransactionState;
import net.corda.core.transactions.SignedTransaction;
import net.corda.testing.node.MockNetwork;
import net.corda.testing.node.MockNetworkParameters;
import net.corda.testing.node.StartedMockNode;
import net.corda.testing.node.TestCordapp;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.template.flows.IssueMetal;
import com.template.flows.TransferMetal;

import static org.junit.Assert.assertEquals;
import static junit.framework.TestCase.assertTrue;

public class FlowTests {
    private final MockNetwork network = new MockNetwork(new MockNetworkParameters(ImmutableList.of(
        TestCordapp.findCordapp("com.template.contracts"),
        TestCordapp.findCordapp("com.template.flows")
    )));

    private final StartedMockNode Mint = network.createNode();
    private final StartedMockNode A = network.createNode();
    private final StartedMockNode B = network.createNode();

    @Before
    public void setup() {
        network.runNetwork();
    }

    @After
    public void tearDown() {
        network.stopNodes();
    }

    // ------------------------------------------ Issue Metal Flow Tests ----------------------------------------

    @Test
    public void transactionHasNoInputsHasOneMetalStateOutputWithTheCorrectOwner() throws Exception {

        IssueMetal flow = new IssueMetal("Gold", 10, A.getInfo().getLegalIdentities().get(0));
        CordaFuture<SignedTransaction> future = Mint.startFlow(flow);
        setup();
        SignedTransaction signedTransaction = future.get();

        assertEquals (0, signedTransaction.getTx().getInputs().size());

        assertEquals (1, signedTransaction.getTx().getOutputStates().size());
        MetalState output = signedTransaction.getTx().outputsOfType(MetalState.class).get(0);

        assertEquals(A.getInfo().getLegalIdentities().get(0), output.getOwner());

    }
}

The Error is:

java.lang.IllegalStateException: Missing the '-javaagent' JVM argument. Make sure you run the tests with the Quasar java agent attached to your JVM.
See https://docs.corda.net/head/testing.html#running-tests-in-intellij - 'Fiber classes not instrumented' for more details.

    at net.corda.node.services.statemachine.SingleThreadedStateMachineManager.checkQuasarJavaAgentPresence(SingleThreadedStateMachineManager.kt:317)
    at net.corda.node.services.statemachine.SingleThreadedStateMachineManager.start(SingleThreadedStateMachineManager.kt:135)
    at net.corda.node.internal.AbstractNode$start$8.invoke(AbstractNode.kt:409)
    at net.corda.node.internal.AbstractNode$start$8.invoke(AbstractNode.kt:122)
    at net.corda.nodeapi.internal.persistence.CordaPersistence.inTopLevelTransaction(CordaPersistence.kt:268)
    at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:237)
    at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:254)
    at net.corda.node.internal.AbstractNode.start(AbstractNode.kt:388)
    at net.corda.testing.node.internal.InternalMockNetwork$MockNode.start(InternalMockNetwork.kt:346)
    at net.corda.testing.node.internal.InternalMockNetwork.createNodeImpl(InternalMockNetwork.kt:471)
    at net.corda.testing.node.internal.InternalMockNetwork.createNode(InternalMockNetwork.kt:449)
    at net.corda.testing.node.internal.InternalMockNetwork.createNode(InternalMockNetwork.kt:444)
    at net.corda.testing.node.internal.InternalMockNetwork.createNotaries$node_driver(InternalMockNetwork.kt:253)
    at net.corda.testing.node.internal.InternalMockNetwork.<init>(InternalMockNetwork.kt:236)
    at net.corda.testing.node.internal.InternalMockNetwork.<init>(InternalMockNetwork.kt:149)
    at net.corda.testing.node.MockNetwork.<init>(MockNetwork.kt:305)
    at net.corda.testing.node.MockNetwork.<init>(MockNetwork.kt:294)
    at net.corda.testing.node.MockNetwork.<init>(MockNetwork.kt:303)
    at com.template.FlowTests.<init>(FlowTests.java:25)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217)
    at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:64)

I would recommend using the Gradle Test Runner so that you don't have to set the javaagent flag manually.

To use Gradle Test Runner Click the Run/Debug configuration drop down > Edit Configurations... > + > Gradle In the form that appears, fill in the details:

Gradle-Project : [path to your project]

Task : :cleanTest:test

Arguments : --tests ""

Reference below: 在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM