package org.skywalking.apm.agent.core.plugin;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.powermock.api.support.membermodification.MemberModifier;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by wusheng on 2017/2/27.
 */
public class PluginCfgTest {
    @Test
    public void testLoad() throws IOException {
        String data = "TestA=com.test.classA\r\nTestB=com.test.ClassB";
        final byte[] dataBytes = data.getBytes();
        PluginCfg.INSTANCE.load(new InputStream() {
            int index = 0;

            @Override
            public int read() throws IOException {
                if (index == dataBytes.length) {
                    return -1;
                }
                return dataBytes[index++];
            }
        });

        List<PluginDefine> list = PluginCfg.INSTANCE.getPluginClassList();
        Assert.assertEquals(2, list.size());
        Assert.assertEquals("com.test.classA", list.get(0).getDefineClass());
        Assert.assertEquals("com.test.ClassB", list.get(1).getDefineClass());
    }

    @Before
    @After
    public void clear() throws IllegalAccessException {
        MemberModifier.field(PluginCfg.class, "pluginClassList").set(PluginCfg.INSTANCE, new ArrayList<String>());
    }
}
