<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.1">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="DALService" enabled="true">
      <stringProp name="TestPlan.comments"></stringProp>
      <boolProp name="TestPlan.functional_mode">false</boolProp>
      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
      <boolProp name="TestPlan.serialize_threadgroups">true</boolProp>
      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
    </TestPlan>
    <hashTree>
      <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments">
          <elementProp name="maxThreads" elementType="Argument">
            <stringProp name="Argument.name">maxThreads</stringProp>
            <stringProp name="Argument.value">100</stringProp>
            <stringProp name="Argument.metadata">=</stringProp>
          </elementProp>
          <elementProp name="domain" elementType="Argument">
            <stringProp name="Argument.name">domain</stringProp>
            <stringProp name="Argument.value">service-dal-use1-1.nonprd.pluto.tv</stringProp>
            <stringProp name="Argument.metadata">=</stringProp>
          </elementProp>
          <elementProp name="port" elementType="Argument">
            <stringProp name="Argument.name">port</stringProp>
            <stringProp name="Argument.value">50051</stringProp>
            <stringProp name="Argument.metadata">=</stringProp>
          </elementProp>
          <elementProp name="protoPath" elementType="Argument">
            <stringProp name="Argument.name">protoPath</stringProp>
            <stringProp name="Argument.value">/home/ubuntu/tests/</stringProp>
            <stringProp name="Argument.metadata">=</stringProp>
          </elementProp>
          <elementProp name="deadline" elementType="Argument">
            <stringProp name="Argument.name">deadline</stringProp>
            <stringProp name="Argument.value">30000</stringProp>
            <stringProp name="Argument.desc">Deadline for gRPC request</stringProp>
            <stringProp name="Argument.metadata">=</stringProp>
          </elementProp>
        </collectionProp>
      </Arguments>
      <hashTree/>
      <DNSCacheManager guiclass="DNSCachePanel" testclass="DNSCacheManager" testname="DNS Cache Manager" enabled="true">
        <collectionProp name="DNSCacheManager.servers"/>
        <boolProp name="DNSCacheManager.clearEachIteration">true</boolProp>
        <boolProp name="DNSCacheManager.isCustomResolver">false</boolProp>
      </DNSCacheManager>
      <hashTree/>
      <com.blazemeter.jmeter.threads.concurrency.ConcurrencyThreadGroup guiclass="com.blazemeter.jmeter.threads.concurrency.ConcurrencyThreadGroupGui" testclass="com.blazemeter.jmeter.threads.concurrency.ConcurrencyThreadGroup" testname="DALServiceGroup" enabled="true">
        <elementProp name="ThreadGroup.main_controller" elementType="com.blazemeter.jmeter.control.VirtualUserController"/>
        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
        <stringProp name="TargetLevel">${__tstFeedback(bzm-timer,1,${maxThreads},10)}</stringProp>
        <stringProp name="RampUp"></stringProp>
        <stringProp name="Steps"></stringProp>
        <stringProp name="Hold">${__P(test.duration)}</stringProp>
        <stringProp name="LogFilename"></stringProp>
        <stringProp name="Iterations"></stringProp>
        <stringProp name="Unit">S</stringProp>
      </com.blazemeter.jmeter.threads.concurrency.ConcurrencyThreadGroup>
      <hashTree>
        <kg.apc.jmeter.timers.VariableThroughputTimer guiclass="kg.apc.jmeter.timers.VariableThroughputTimerGui" testclass="kg.apc.jmeter.timers.VariableThroughputTimer" testname="bzm-timer" enabled="true">
          <collectionProp name="load_profile">
            <collectionProp name="-611939151">
              <stringProp name="53">5</stringProp>
              <stringProp name="1596796">4000</stringProp>
              <stringProp name="48873">180</stringProp>
            </collectionProp>
            <collectionProp name="-1409303931">
              <stringProp name="1626587">5000</stringProp>
              <stringProp name="1626587">5000</stringProp>
              <stringProp name="1572771">3600</stringProp>
            </collectionProp>
          </collectionProp>
        </kg.apc.jmeter.timers.VariableThroughputTimer>
        <hashTree/>
        <ThroughputController guiclass="ThroughputControllerGui" testclass="ThroughputController" testname="JSR223 Test" enabled="true">
          <intProp name="ThroughputController.style">1</intProp>
          <boolProp name="ThroughputController.perThread">false</boolProp>
          <intProp name="ThroughputController.maxThroughput">1</intProp>
          <FloatProperty>
            <name>ThroughputController.percentThroughput</name>
            <value>100.0</value>
            <savedValue>0.0</savedValue>
          </FloatProperty>
        </ThroughputController>
        <hashTree>
          <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="GeLanguages" enabled="true">
            <stringProp name="cacheKey">true</stringProp>
            <stringProp name="filename"></stringProp>
            <stringProp name="parameters"></stringProp>
            <stringProp name="script">import io.grpc.ClientInterceptor;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import tv.pluto.ip.dal.language.LanguageManagerGrpc;

import static tv.pluto.ip.dal.language.LanguageManagerGrpc.LanguageManagerBlockingStub;
import tv.pluto.ip.dal.language.Languages.GetLanguagesRequest;
import tv.pluto.ip.dal.language.Languages.GetLanguagesResponse;

Metadata getMetadata() {
        // create a custom header
        Metadata header = new Metadata();
        Metadata.Key&lt;String&gt; key =
                Metadata.Key.of(&quot;app_name&quot;, Metadata.ASCII_STRING_MARSHALLER);
        header.put(key, &quot;performance_tests&quot;);

        return header;
    }

int maxInboundMessageSize = 1024 * 1024 * 1024; // 1GB

ManagedChannel channel = ManagedChannelBuilder.forTarget(vars.get(&quot;domain&quot;) + &quot;:&quot; + vars.get(&quot;port&quot;))
                        .maxInboundMessageSize(maxInboundMessageSize)
                        .build();

ClientInterceptor CLIENT_INTERCEPTOR = MetadataUtils.newAttachHeadersInterceptor(getMetadata());

LanguageManagerBlockingStub blockingStub;
blockingStub = LanguageManagerGrpc.newBlockingStub(channel);
blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);

try {
	blockingStub.getLanguages(GetLanguagesRequest.newBuilder().build());
} finally {
	channel.shutdown();
}
</stringProp>
            <stringProp name="scriptLanguage">groovy</stringProp>
          </JSR223Sampler>
          <hashTree/>
          <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="GetChannelById" enabled="true">
            <stringProp name="cacheKey">true</stringProp>
            <stringProp name="filename"></stringProp>
            <stringProp name="parameters"></stringProp>
            <stringProp name="script">import io.grpc.ClientInterceptor;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import tv.pluto.ip.dal.channels.ChannelManagerGrpc;

import static tv.pluto.ip.dal.channels.ChannelManagerGrpc.ChannelManagerBlockingStub;
import tv.pluto.ip.dal.channels.Channels.GetByIdRequest;
import tv.pluto.ip.dal.channels.Channels.GetByIdResponse;

Metadata getMetadata() {
        // create a custom header
        Metadata header = new Metadata();
        Metadata.Key&lt;String&gt; key =
                Metadata.Key.of(&quot;app_name&quot;, Metadata.ASCII_STRING_MARSHALLER);
        header.put(key, &quot;performance_tests&quot;);

        return header;
    }

int maxInboundMessageSize = 1024 * 1024 * 1024; // 1GB

ManagedChannel channel = ManagedChannelBuilder.forTarget(vars.get(&quot;domain&quot;) + &quot;:&quot; + vars.get(&quot;port&quot;))
                        .maxInboundMessageSize(maxInboundMessageSize)
                        .build();

ClientInterceptor CLIENT_INTERCEPTOR = MetadataUtils.newAttachHeadersInterceptor(getMetadata());

ChannelManagerBlockingStub blockingStub;
blockingStub = ChannelManagerGrpc.newBlockingStub(channel);
blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);

String id = &quot;51c75f7bb6f26ba1cd000009&quot;;

GetByIdRequest request = GetByIdRequest.newBuilder()
                .setId(id)
                .build();

try {
	if (!blockingStub.getById(request).getDocument().getId().equals(id)) {
		throw new RuntimeException(&quot;Wrong channel returned&quot;);
     }
} finally {
	channel.shutdown();
}
</stringProp>
            <stringProp name="scriptLanguage">groovy</stringProp>
          </JSR223Sampler>
          <hashTree/>
          <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="GetClipById" enabled="true">
            <stringProp name="cacheKey">true</stringProp>
            <stringProp name="filename"></stringProp>
            <stringProp name="parameters"></stringProp>
            <stringProp name="script">import io.grpc.ClientInterceptor;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import tv.pluto.ip.dal.clip.ClipManagerGrpc;

import static tv.pluto.ip.dal.clip.ClipManagerGrpc.ClipManagerBlockingStub;
import tv.pluto.ip.dal.clip.Clips.GetByIdRequest;
import tv.pluto.ip.dal.clip.Clips.GetByIdResponse;

Metadata getMetadata() {
        // create a custom header
        Metadata header = new Metadata();
        Metadata.Key&lt;String&gt; key =
                Metadata.Key.of(&quot;app_name&quot;, Metadata.ASCII_STRING_MARSHALLER);
        header.put(key, &quot;performance_tests&quot;);

        return header;
    }

int maxInboundMessageSize = 1024 * 1024 * 1024; // 1GB

ManagedChannel channel = ManagedChannelBuilder.forTarget(vars.get(&quot;domain&quot;) + &quot;:&quot; + vars.get(&quot;port&quot;))
                        .maxInboundMessageSize(maxInboundMessageSize)
                        .build();

ClientInterceptor CLIENT_INTERCEPTOR = MetadataUtils.newAttachHeadersInterceptor(getMetadata());

ClipManagerBlockingStub blockingStub;
blockingStub = ClipManagerGrpc.newBlockingStub(channel);
blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);

String id = &quot;51c75f7bb6f26ba1cd000042&quot;;

GetByIdRequest request = GetByIdRequest.newBuilder()
                .setId(id)
                .build();


try {
	if (!blockingStub.getById(request).getDocument().getId().equals(id)) {
		throw new RuntimeException(&quot;Wrong channel returned&quot;);
     }
} finally {
	channel.shutdown();
}

</stringProp>
            <stringProp name="scriptLanguage">groovy</stringProp>
          </JSR223Sampler>
          <hashTree/>
          <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="GetDeviceById" enabled="true">
            <stringProp name="cacheKey">true</stringProp>
            <stringProp name="filename"></stringProp>
            <stringProp name="parameters"></stringProp>
            <stringProp name="script">import io.grpc.ClientInterceptor;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import tv.pluto.ip.dal.device.DeviceManagerGrpc;

import tv.pluto.ip.dal.device.DeviceManagerGrpc.DeviceManagerBlockingStub;
import tv.pluto.ip.dal.device.Devices.GetByIdRequest;

Metadata getMetadata() {
        // create a custom header
        Metadata header = new Metadata();
        Metadata.Key&lt;String&gt; key =
                Metadata.Key.of(&quot;app_name&quot;, Metadata.ASCII_STRING_MARSHALLER);
        header.put(key, &quot;performance_tests&quot;);

        return header;
    }

int maxInboundMessageSize = 1024 * 1024 * 1024; // 1GB

ManagedChannel channel = ManagedChannelBuilder.forTarget(vars.get(&quot;domain&quot;) + &quot;:&quot; + vars.get(&quot;port&quot;))
                        .maxInboundMessageSize(maxInboundMessageSize)
                        .build();

ClientInterceptor CLIENT_INTERCEPTOR = MetadataUtils.newAttachHeadersInterceptor(getMetadata());

DeviceManagerBlockingStub blockingStub;
blockingStub = DeviceManagerGrpc.newBlockingStub(channel);
blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);

String id = &quot;56a824b8ab8c066403d9135a&quot;;

GetByIdRequest request = GetByIdRequest.newBuilder()
                .setId(id)
                .build();


try {
	if (!blockingStub.getById(request).getDocument().getId().equals(id)) {
		throw new RuntimeException(&quot;Wrong channel returned&quot;);
     }
} finally {
	channel.shutdown();
}

</stringProp>
            <stringProp name="scriptLanguage">groovy</stringProp>
          </JSR223Sampler>
          <hashTree/>
          <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="GetEpisodeById" enabled="true">
            <stringProp name="cacheKey">true</stringProp>
            <stringProp name="filename"></stringProp>
            <stringProp name="parameters"></stringProp>
            <stringProp name="script">import io.grpc.ClientInterceptor;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import tv.pluto.ip.dal.episode.EpisodeManagerGrpc;

import tv.pluto.ip.dal.episode.EpisodeManagerGrpc.EpisodeManagerBlockingStub;
import tv.pluto.ip.dal.episode.Episodes.GetByIdRequest;

Metadata getMetadata() {
        // create a custom header
        Metadata header = new Metadata();
        Metadata.Key&lt;String&gt; key =
                Metadata.Key.of(&quot;app_name&quot;, Metadata.ASCII_STRING_MARSHALLER);
        header.put(key, &quot;performance_tests&quot;);

        return header;
    }

int maxInboundMessageSize = 1024 * 1024 * 1024; // 1GB

ManagedChannel channel = ManagedChannelBuilder.forTarget(vars.get(&quot;domain&quot;) + &quot;:&quot; + vars.get(&quot;port&quot;))
                        .maxInboundMessageSize(maxInboundMessageSize)
                        .build();

ClientInterceptor CLIENT_INTERCEPTOR = MetadataUtils.newAttachHeadersInterceptor(getMetadata());

EpisodeManagerBlockingStub blockingStub;
blockingStub = EpisodeManagerGrpc.newBlockingStub(channel);
blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);

String id = &quot;521d673119f6a0cf6d000553&quot;;

GetByIdRequest request = GetByIdRequest.newBuilder()
                .setId(id)
                .build();


try {
	if (!blockingStub.getById(request).getDocument().getId().equals(id)) {
		throw new RuntimeException(&quot;Wrong channel returned&quot;);
     }
} finally {
	channel.shutdown();
}

</stringProp>
            <stringProp name="scriptLanguage">groovy</stringProp>
          </JSR223Sampler>
          <hashTree/>
          <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="GetPartnerById" enabled="true">
            <stringProp name="cacheKey">true</stringProp>
            <stringProp name="filename"></stringProp>
            <stringProp name="parameters"></stringProp>
            <stringProp name="script">import io.grpc.ClientInterceptor;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import tv.pluto.ip.dal.partner.PartnerManagerGrpc;

import tv.pluto.ip.dal.partner.PartnerManagerGrpc.PartnerManagerBlockingStub;
import tv.pluto.ip.dal.partner.Partners.GetByIdRequest;

Metadata getMetadata() {
        // create a custom header
        Metadata header = new Metadata();
        Metadata.Key&lt;String&gt; key =
                Metadata.Key.of(&quot;app_name&quot;, Metadata.ASCII_STRING_MARSHALLER);
        header.put(key, &quot;performance_tests&quot;);

        return header;
    }

int maxInboundMessageSize = 1024 * 1024 * 1024; // 1GB

ManagedChannel channel = ManagedChannelBuilder.forTarget(vars.get(&quot;domain&quot;) + &quot;:&quot; + vars.get(&quot;port&quot;))
                        .maxInboundMessageSize(maxInboundMessageSize)
                        .build();

ClientInterceptor CLIENT_INTERCEPTOR = MetadataUtils.newAttachHeadersInterceptor(getMetadata());

PartnerManagerBlockingStub blockingStub;
blockingStub = PartnerManagerGrpc.newBlockingStub(channel);
blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);

String id = &quot;5581b2ec5da69c3bfdc0a316&quot;;

GetByIdRequest request = GetByIdRequest.newBuilder()
                .setId(id)
                .build();


try {
	if (!blockingStub.getById(request).getDocument().getId().equals(id)) {
		throw new RuntimeException(&quot;Wrong channel returned&quot;);
     }
} finally {
	channel.shutdown();
}

</stringProp>
            <stringProp name="scriptLanguage">groovy</stringProp>
          </JSR223Sampler>
          <hashTree/>
          <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="GetPublishingUserById" enabled="true">
            <stringProp name="cacheKey">true</stringProp>
            <stringProp name="filename"></stringProp>
            <stringProp name="parameters"></stringProp>
            <stringProp name="script">import io.grpc.ClientInterceptor;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import tv.pluto.ip.dal.publishinguser.PublishingUserManagerGrpc;

import tv.pluto.ip.dal.publishinguser.PublishingUserManagerGrpc.PublishingUserManagerBlockingStub;
import tv.pluto.ip.dal.publishinguser.PublishingUsers.GetByIdRequest;

Metadata getMetadata() {
        // create a custom header
        Metadata header = new Metadata();
        Metadata.Key&lt;String&gt; key =
                Metadata.Key.of(&quot;app_name&quot;, Metadata.ASCII_STRING_MARSHALLER);
        header.put(key, &quot;performance_tests&quot;);

        return header;
    }

int maxInboundMessageSize = 1024 * 1024 * 1024; // 1GB

ManagedChannel channel = ManagedChannelBuilder.forTarget(vars.get(&quot;domain&quot;) + &quot;:&quot; + vars.get(&quot;port&quot;))
                        .maxInboundMessageSize(maxInboundMessageSize)
                        .build();

ClientInterceptor CLIENT_INTERCEPTOR = MetadataUtils.newAttachHeadersInterceptor(getMetadata());

PublishingUserManagerBlockingStub blockingStub;
blockingStub = PublishingUserManagerGrpc.newBlockingStub(channel);
blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);

String id = &quot;5d93b9519bc293000912e04b&quot;;

GetByIdRequest request = GetByIdRequest.newBuilder()
                .setId(id)
                .build();


try {
	if (!blockingStub.getById(request).getDocument().getId().equals(id)) {
		throw new RuntimeException(&quot;Wrong channel returned&quot;);
     }
} finally {
	channel.shutdown();
}

</stringProp>
            <stringProp name="scriptLanguage">groovy</stringProp>
          </JSR223Sampler>
          <hashTree/>
          <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="GetSeriesById" enabled="true">
            <stringProp name="cacheKey">true</stringProp>
            <stringProp name="filename"></stringProp>
            <stringProp name="parameters"></stringProp>
            <stringProp name="script">import io.grpc.ClientInterceptor;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import tv.pluto.ip.dal.series.SeriesManagerGrpc;

import tv.pluto.ip.dal.series.SeriesManagerGrpc.SeriesManagerBlockingStub;
import tv.pluto.ip.dal.series.SeriesOuterClass.GetByIdRequest;

Metadata getMetadata() {
        // create a custom header
        Metadata header = new Metadata();
        Metadata.Key&lt;String&gt; key =
                Metadata.Key.of(&quot;app_name&quot;, Metadata.ASCII_STRING_MARSHALLER);
        header.put(key, &quot;performance_tests&quot;);

        return header;
    }

int maxInboundMessageSize = 1024 * 1024 * 1024; // 1GB

ManagedChannel channel = ManagedChannelBuilder.forTarget(vars.get(&quot;domain&quot;) + &quot;:&quot; + vars.get(&quot;port&quot;))
                        .maxInboundMessageSize(maxInboundMessageSize)
                        .build();

ClientInterceptor CLIENT_INTERCEPTOR = MetadataUtils.newAttachHeadersInterceptor(getMetadata());

SeriesManagerBlockingStub blockingStub;
blockingStub = SeriesManagerGrpc.newBlockingStub(channel);
blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);

String id = &quot;55af18da27f18b7f8bc270ab&quot;;

GetByIdRequest request = GetByIdRequest.newBuilder()
                .setId(id)
                .build();


try {
	if (!blockingStub.getById(request).getDocument().getId().equals(id)) {
		throw new RuntimeException(&quot;Wrong channel returned&quot;);
     }
} finally {
	channel.shutdown();
}

</stringProp>
            <stringProp name="scriptLanguage">groovy</stringProp>
          </JSR223Sampler>
          <hashTree/>
          <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="GetSubClipById" enabled="true">
            <stringProp name="cacheKey">true</stringProp>
            <stringProp name="filename"></stringProp>
            <stringProp name="parameters"></stringProp>
            <stringProp name="script">import io.grpc.ClientInterceptor;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import tv.pluto.ip.dal.subclip.SubClipManagerGrpc;

import tv.pluto.ip.dal.subclip.SubClipManagerGrpc.SubClipManagerBlockingStub;
import tv.pluto.ip.dal.subclip.SubClips.GetByIdRequest;

Metadata getMetadata() {
        // create a custom header
        Metadata header = new Metadata();
        Metadata.Key&lt;String&gt; key =
                Metadata.Key.of(&quot;app_name&quot;, Metadata.ASCII_STRING_MARSHALLER);
        header.put(key, &quot;performance_tests&quot;);

        return header;
    }

int maxInboundMessageSize = 1024 * 1024 * 1024; // 1GB

ManagedChannel channel = ManagedChannelBuilder.forTarget(vars.get(&quot;domain&quot;) + &quot;:&quot; + vars.get(&quot;port&quot;))
                        .maxInboundMessageSize(maxInboundMessageSize)
                        .build();

ClientInterceptor CLIENT_INTERCEPTOR = MetadataUtils.newAttachHeadersInterceptor(getMetadata());

SubClipManagerBlockingStub blockingStub;
blockingStub = SubClipManagerGrpc.newBlockingStub(channel);
blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);

String id = &quot;5cc1fcd447f054c29ccd21c7&quot;;

GetByIdRequest request = GetByIdRequest.newBuilder()
                .setId(id)
                .build();


try {
	if (!blockingStub.getById(request).getDocument().getId().equals(id)) {
		throw new RuntimeException(&quot;Wrong channel returned&quot;);
     }
} finally {
	channel.shutdown();
}

</stringProp>
            <stringProp name="scriptLanguage">groovy</stringProp>
          </JSR223Sampler>
          <hashTree/>
          <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="GetTimelineById" enabled="false">
            <stringProp name="cacheKey">true</stringProp>
            <stringProp name="filename"></stringProp>
            <stringProp name="parameters"></stringProp>
            <stringProp name="script">import io.grpc.ClientInterceptor;
import io.grpc.Metadata;
import io.grpc.stub.MetadataUtils;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import tv.pluto.ip.dal.timeline.TimelineManagerGrpc;

import tv.pluto.ip.dal.timeline.TimelineManagerGrpc.TimelineManagerBlockingStub;
import tv.pluto.ip.dal.timeline.Timelines.GetByIdRequest;

Metadata getMetadata() {
        // create a custom header
        Metadata header = new Metadata();
        Metadata.Key&lt;String&gt; key =
                Metadata.Key.of(&quot;app_name&quot;, Metadata.ASCII_STRING_MARSHALLER);
        header.put(key, &quot;performance_tests&quot;);

        return header;
    }

int maxInboundMessageSize = 1024 * 1024 * 1024; // 1GB

ManagedChannel channel = ManagedChannelBuilder.forTarget(vars.get(&quot;domain&quot;) + &quot;:&quot; + vars.get(&quot;port&quot;))
                        .maxInboundMessageSize(maxInboundMessageSize)
                        .build();

ClientInterceptor CLIENT_INTERCEPTOR = MetadataUtils.newAttachHeadersInterceptor(getMetadata());

TimelineManagerBlockingStub blockingStub;
blockingStub = TimelineManagerGrpc.newBlockingStub(channel);
blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);

String id = &quot;6422c5a0dbdaaa0008589158&quot;;

GetByIdRequest request = GetByIdRequest.newBuilder()
                .setId(id)
                .build();


try {
	if (!blockingStub.getById(request).getDocument().getId().equals(id)) {
		throw new RuntimeException(&quot;Wrong channel returned&quot;);
     }
} finally {
	channel.shutdown();
}

</stringProp>
            <stringProp name="scriptLanguage">groovy</stringProp>
          </JSR223Sampler>
          <hashTree/>
        </hashTree>
        <ThroughputController guiclass="ThroughputControllerGui" testclass="ThroughputController" testname="Throughput Controller 1" enabled="false">
          <intProp name="ThroughputController.style">1</intProp>
          <boolProp name="ThroughputController.perThread">false</boolProp>
          <intProp name="ThroughputController.maxThroughput">1</intProp>
          <FloatProperty>
            <name>ThroughputController.percentThroughput</name>
            <value>50.0</value>
            <savedValue>0.0</savedValue>
          </FloatProperty>
        </ThroughputController>
        <hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="GetChannels" enabled="false">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">app_name: &quot;performance_test&quot;</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">channelpackage.ChannelManager/GetChannelById</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <stringProp name="GRPCSampler.requestJson">{
   &quot;id&quot;:&quot;62865cca72d0d700071aa879&quot;
}</stringProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="GetHydratedEpisode" enabled="false">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">app_name: &quot;performance_test&quot;</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">sequencerpackage.SequencerManager/GetHydratedEpisode</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <stringProp name="GRPCSampler.requestJson">{
   &quot;id&quot;:&quot;51c75f7fb6f26ba1cd001451&quot;
}</stringProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="GetComScore" enabled="false">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">app_name: &quot;performance_test&quot;</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">comscorepackage.ComScoreManager/GetComScoreForClip</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <stringProp name="GRPCSampler.requestJson">{
   &quot;id&quot;:&quot;5e320a977969d1775d718a15&quot;
}</stringProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="GetHydratedTimeline" enabled="false">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">app_name: &quot;performance_test&quot;</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">sequencerpackage.SequencerManager/GetHydratedTimeline</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <stringProp name="GRPCSampler.requestJson">{
   &quot;id&quot;:&quot;51c75f7bb6f26ba1cd00000e&quot;
}</stringProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="VodCategoryEntry GetVodCategoryEntriesByVodCategoryId" enabled="true">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">{app_name: &quot;performance_test&quot;}</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">vodcategoryentrypackage.VodCategoryEntryManager/GetVodCategoryEntriesByVodCategoryId</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
            <stringProp name="GRPCSampler.requestJson">{
  &quot;id&quot;: &quot;58e1e12717d972af2febfd9e&quot;
}</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
        </hashTree>
        <ThroughputController guiclass="ThroughputControllerGui" testclass="ThroughputController" testname="Throughput Controller 2" enabled="false">
          <intProp name="ThroughputController.style">1</intProp>
          <boolProp name="ThroughputController.perThread">false</boolProp>
          <intProp name="ThroughputController.maxThroughput">1</intProp>
          <FloatProperty>
            <name>ThroughputController.percentThroughput</name>
            <value>50.0</value>
            <savedValue>0.0</savedValue>
          </FloatProperty>
        </ThroughputController>
        <hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="GetByEpisodeId" enabled="true">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">{ app_name: &quot;performance_test&quot;}</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">vodcategorypackage.VodCategoryManager/GetByEpisodeId</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
            <stringProp name="GRPCSampler.requestJson">{
	&quot;id&quot;:&quot;58e1ad9e91586c9d2fbe4140&quot;
}</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="GetTimeline" enabled="false">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">app_name: &quot;performance_test&quot;</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">timelinepackage.TimelineManager/GetTimelineById</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <stringProp name="GRPCSampler.requestJson">{
   &quot;id&quot;:&quot;62c2def9d707b900073a0ff3&quot;
}</stringProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="GetEpisode" enabled="false">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">app_name: &quot;performance_test&quot;</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">episodepackage.EpisodeManager/GetEpisodeById</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <stringProp name="GRPCSampler.requestJson">{
   &quot;id&quot;:&quot;524dc7c23e0983ea090014d8&quot;
}</stringProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="GetClips" enabled="false">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">app_name: &quot;performance_test&quot;</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">clippackage.ClipManager/GetClipById</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <stringProp name="GRPCSampler.requestJson">{
   &quot;id&quot;:&quot;51c75f7bb6f26ba1cd00005c&quot;
}</stringProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="GetSubClips" enabled="false">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">app_name: &quot;performance_test&quot;</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">subclippackage.SubClipManager/GetSubClipById</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <stringProp name="GRPCSampler.requestJson">{
   &quot;id&quot;:&quot;5cc1f44a599ddd092a5b191f&quot;
}</stringProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="GetSeries" enabled="false">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">app_name: &quot;performance_test&quot;</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">seriespackage.SeriesManager/GetSeriesById</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <stringProp name="GRPCSampler.requestJson">{
   &quot;id&quot;:&quot;55af18db27f18b7f8bc27116&quot;
}</stringProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="GetPartners" enabled="false">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">app_name: &quot;performance_test&quot;</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">partnerpackage.PartnerManager/GetPartnerById</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <stringProp name="GRPCSampler.requestJson">{
   &quot;id&quot;:&quot;5581b2ec5da69c3bfdc0a316&quot;
}</stringProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
        </hashTree>
        <ThroughputController guiclass="ThroughputControllerGui" testclass="ThroughputController" testname="Throughput Controller 3" enabled="false">
          <intProp name="ThroughputController.style">1</intProp>
          <boolProp name="ThroughputController.perThread">false</boolProp>
          <intProp name="ThroughputController.maxThroughput">1</intProp>
          <FloatProperty>
            <name>ThroughputController.percentThroughput</name>
            <value>35.0</value>
            <savedValue>0.0</savedValue>
          </FloatProperty>
        </ThroughputController>
        <hashTree>
          <vn.zalopay.benchmark.GRPCSampler guiclass="vn.zalopay.benchmark.GRPCSamplerGui" testclass="vn.zalopay.benchmark.GRPCSampler" testname="Timeline GetByEpisodeId" enabled="true">
            <stringProp name="GRPCSampler.protoFolder">${protoPath}</stringProp>
            <stringProp name="GRPCSampler.libFolder"></stringProp>
            <stringProp name="GRPCSampler.metadata">{ app_name: &quot;performance_test&quot;}</stringProp>
            <stringProp name="GRPCSampler.host">${domain}</stringProp>
            <stringProp name="GRPCSampler.port">${port}</stringProp>
            <stringProp name="GRPCSampler.fullMethod">timelinepackage.TimelineManager/GetByEpisodeId</stringProp>
            <stringProp name="GRPCSampler.deadline">${deadline}</stringProp>
            <boolProp name="GRPCSampler.tls">true</boolProp>
            <boolProp name="GRPCSampler.tlsDisableVerification">false</boolProp>
            <stringProp name="GRPCSampler.channelAwaitTermination">5000</stringProp>
            <stringProp name="GRPCSampler.maxInboundMessageSize">4194304</stringProp>
            <stringProp name="GRPCSampler.maxInboundMetadataSize">8192</stringProp>
            <stringProp name="GRPCSampler.requestJson">{
  &quot;id&quot;: &quot;5eb7e3ffd6ea50001a323037a&quot;,
  &quot;limit&quot;: 1,
  &quot;offset&quot;: 0
}</stringProp>
          </vn.zalopay.benchmark.GRPCSampler>
          <hashTree>
            <JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true">
              <stringProp name="scriptLanguage">java</stringProp>
              <stringProp name="parameters"></stringProp>
              <stringProp name="filename"></stringProp>
              <stringProp name="cacheKey">true</stringProp>
              <stringProp name="script">String message = &quot;&quot;;
String responseStatusCode = sampleResult.getResponseCode();
String responseMessage = sampleResult.getResponseMessage();

if (!sampleResult.isSuccessful()){
 	message = &quot;ResponseCode: &quot; + responseStatusCode + &quot; ResponseMessage: &quot; + responseMessage;
	log.error(message);
}</stringProp>
            </JSR223Listener>
            <hashTree/>
          </hashTree>
        </hashTree>
      </hashTree>
      <ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" enabled="false">
        <boolProp name="ResultCollector.error_logging">false</boolProp>
        <objProp>
          <name>saveConfig</name>
          <value class="SampleSaveConfiguration">
            <time>true</time>
            <latency>true</latency>
            <timestamp>true</timestamp>
            <success>true</success>
            <label>true</label>
            <code>true</code>
            <message>true</message>
            <threadName>true</threadName>
            <dataType>true</dataType>
            <encoding>true</encoding>
            <assertions>true</assertions>
            <subresults>true</subresults>
            <responseData>true</responseData>
            <samplerData>true</samplerData>
            <xml>true</xml>
            <fieldNames>true</fieldNames>
            <responseHeaders>true</responseHeaders>
            <requestHeaders>true</requestHeaders>
            <responseDataOnError>false</responseDataOnError>
            <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
            <assertionsResultsToSave>0</assertionsResultsToSave>
            <bytes>true</bytes>
            <sentBytes>true</sentBytes>
            <url>true</url>
            <fileName>true</fileName>
            <hostname>true</hostname>
            <threadCounts>true</threadCounts>
            <sampleCount>true</sampleCount>
            <idleTime>true</idleTime>
            <connectTime>true</connectTime>
          </value>
        </objProp>
        <stringProp name="filename"></stringProp>
        <boolProp name="useGroupName">true</boolProp>
      </ResultCollector>
      <hashTree/>
      <Summariser guiclass="SummariserGui" testclass="Summariser" testname="Generate Summary Results" enabled="true"/>
      <hashTree/>
      <BackendListener guiclass="BackendListenerGui" testclass="BackendListener" testname="Backend Listener Datadog" enabled="true">
        <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
          <collectionProp name="Arguments.arguments">
            <elementProp name="apiKey" elementType="Argument">
              <stringProp name="Argument.name">apiKey</stringProp>
              <stringProp name="Argument.value">${__P(datadog.apiKey)}</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="datadogUrl" elementType="Argument">
              <stringProp name="Argument.name">datadogUrl</stringProp>
              <stringProp name="Argument.value">https://api.datadoghq.com/api/</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="logIntakeUrl" elementType="Argument">
              <stringProp name="Argument.name">logIntakeUrl</stringProp>
              <stringProp name="Argument.value">https://http-intake.logs.datadoghq.com/v1/input/</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="metricsMaxBatchSize" elementType="Argument">
              <stringProp name="Argument.name">metricsMaxBatchSize</stringProp>
              <stringProp name="Argument.value">200</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="logsBatchSize" elementType="Argument">
              <stringProp name="Argument.name">logsBatchSize</stringProp>
              <stringProp name="Argument.value">500</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="sendResultsAsLogs" elementType="Argument">
              <stringProp name="Argument.name">sendResultsAsLogs</stringProp>
              <stringProp name="Argument.value">true</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="includeSubresults" elementType="Argument">
              <stringProp name="Argument.name">includeSubresults</stringProp>
              <stringProp name="Argument.value">true</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="samplersRegex" elementType="Argument">
              <stringProp name="Argument.name">samplersRegex</stringProp>
              <stringProp name="Argument.value"></stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="customTags" elementType="Argument">
              <stringProp name="Argument.name">customTags</stringProp>
              <stringProp name="Argument.value">application:service-dal,appurl:${__P(app.url)}</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="excludeLogsResponseCodeRegex" elementType="Argument">
              <stringProp name="Argument.name">excludeLogsResponseCodeRegex</stringProp>
              <stringProp name="Argument.value">[123][0-5][0-9]</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
          </collectionProp>
        </elementProp>
        <stringProp name="classname">org.datadog.jmeter.plugins.DatadogBackendClient</stringProp>
      </BackendListener>
      <hashTree/>
      <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="false">
        <boolProp name="ResultCollector.error_logging">true</boolProp>
        <objProp>
          <name>saveConfig</name>
          <value class="SampleSaveConfiguration">
            <time>true</time>
            <latency>true</latency>
            <timestamp>true</timestamp>
            <success>true</success>
            <label>true</label>
            <code>true</code>
            <message>true</message>
            <threadName>true</threadName>
            <dataType>true</dataType>
            <encoding>false</encoding>
            <assertions>true</assertions>
            <subresults>true</subresults>
            <responseData>true</responseData>
            <samplerData>true</samplerData>
            <xml>true</xml>
            <fieldNames>false</fieldNames>
            <responseHeaders>true</responseHeaders>
            <requestHeaders>true</requestHeaders>
            <responseDataOnError>false</responseDataOnError>
            <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
            <assertionsResultsToSave>0</assertionsResultsToSave>
            <bytes>true</bytes>
            <sentBytes>true</sentBytes>
            <url>true</url>
            <fileName>true</fileName>
            <hostname>true</hostname>
            <threadCounts>true</threadCounts>
            <sampleCount>true</sampleCount>
            <idleTime>true</idleTime>
            <connectTime>true</connectTime>
          </value>
        </objProp>
        <stringProp name="filename"></stringProp>
      </ResultCollector>
      <hashTree/>
      <BackendListener guiclass="BackendListenerGui" testclass="BackendListener" testname="Backend Listener Grafana" enabled="true">
        <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
          <collectionProp name="Arguments.arguments">
            <elementProp name="influxdbMetricsSender" elementType="Argument">
              <stringProp name="Argument.name">influxdbMetricsSender</stringProp>
              <stringProp name="Argument.value">org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="influxdbUrl" elementType="Argument">
              <stringProp name="Argument.name">influxdbUrl</stringProp>
              <stringProp name="Argument.value">https://influxdb.grafana.pluto.tv/write?db=jmeter</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="application" elementType="Argument">
              <stringProp name="Argument.name">application</stringProp>
              <stringProp name="Argument.value">DAL-Service</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="measurement" elementType="Argument">
              <stringProp name="Argument.name">measurement</stringProp>
              <stringProp name="Argument.value">jmeter</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="summaryOnly" elementType="Argument">
              <stringProp name="Argument.name">summaryOnly</stringProp>
              <stringProp name="Argument.value">false</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="samplersRegex" elementType="Argument">
              <stringProp name="Argument.name">samplersRegex</stringProp>
              <stringProp name="Argument.value">.*</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="percentiles" elementType="Argument">
              <stringProp name="Argument.name">percentiles</stringProp>
              <stringProp name="Argument.value">99;95;90</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="testTitle" elementType="Argument">
              <stringProp name="Argument.name">testTitle</stringProp>
              <stringProp name="Argument.value">DAL Service Tests</stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="eventTags" elementType="Argument">
              <stringProp name="Argument.name">eventTags</stringProp>
              <stringProp name="Argument.value"></stringProp>
              <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
          </collectionProp>
        </elementProp>
        <stringProp name="classname">org.apache.jmeter.visualizers.backend.influxdb.InfluxdbBackendListenerClient</stringProp>
      </BackendListener>
      <hashTree/>
    </hashTree>
  </hashTree>
</jmeterTestPlan>
