From 3c05ab14aa7ef106dc85180161ab276bebf2da41 Mon Sep 17 00:00:00 2001 From: Oleg Gritchin Date: Thu, 27 Jun 2019 17:51:43 +0300 Subject: [PATCH 1/6] good job, oleg --- .../repository/RepositoryController.java | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java index 12472e4..8fb55ad 100644 --- a/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java +++ b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java @@ -32,15 +32,27 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; +import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; +import static javax.servlet.http.HttpServletResponse.SC_SERVICE_UNAVAILABLE; + import org.apache.http.HttpStatus; import org.apache.http.util.ByteArrayBuffer; import org.eclipse.rdf4j.RDF4JException; +import org.eclipse.rdf4j.common.lang.FileFormat; +import org.eclipse.rdf4j.common.lang.service.FileFormatServiceRegistry; import org.eclipse.rdf4j.http.protocol.Protocol; +import org.eclipse.rdf4j.http.server.ClientHTTPException; import org.eclipse.rdf4j.http.server.HTTPException; import org.eclipse.rdf4j.http.server.ServerHTTPException; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.Model; import org.eclipse.rdf4j.model.ValueFactory; +import org.eclipse.rdf4j.query.BooleanQuery; +import org.eclipse.rdf4j.query.Query; +import org.eclipse.rdf4j.query.QueryEvaluationException; +import org.eclipse.rdf4j.query.QueryInterruptedException; +import org.eclipse.rdf4j.query.QueryLanguage; +import org.eclipse.rdf4j.query.resultio.BooleanQueryResultWriterRegistry; import org.eclipse.rdf4j.repository.Repository; import org.eclipse.rdf4j.repository.RepositoryConnection; import org.eclipse.rdf4j.repository.RepositoryException; @@ -74,11 +86,13 @@ public class RepositoryController { @Reference private RepositoryManager repositoryManager; + public RepositoryController() { System.out.println("Init RepositoryController"); } + /* @GET @Path("/repositories/{repId}") @Produces({"application/json", "application/sparql-results+json"}) @@ -92,6 +106,64 @@ public boolean get(@Context UriInfo uriInfo, @PathParam("repId") String repId, System.out.println("query=" + query); return true; + }*/ + + @GET + @Path("/repositories/{repId}") + @Produces({"application/json", "application/sparql-results+json"}) + public Query get(@Context UriInfo uriInfo, @PathParam("repId") String repId, + @QueryParam("query") Query query, @QueryParam("queryLn") QueryLanguage queryLn, + @QueryParam("queryLn") String infer, @QueryParam("queryLn") String timeout, + @QueryParam("queryLn") boolean distinct, @QueryParam("queryLn") long limit, + @QueryParam("queryLn") long offset) throws WebApplicationException, IOException, HTTPException { + System.out.println("RepositoryController.get"); + System.out.println("repId=" + repId); + System.out.println("query=" + query); + + boolean headersOnly = false; + + /* ConfigTemplate ct = rcc.getConfigTemplate("native"); + System.out.println("ConfigTemplate: " + ct); + + Map queryParams = new HashMap<>(); + queryParams.put("Repository ID", repId); + String strConfTemplate = ct.render(queryParams); + System.out.println("ConfigTemplate render: " + strConfTemplate); + RepositoryConfig rc = rcc.updateRepositoryConfig(strConfTemplate); + System.out.println("RepositoryConfig.id: " + rc.getID()); + System.out.println("RepositoryConfig: " + rc.toString()); + + Repository repository = repositoryManager.getRepository(repId); + repository.init(); + RepositoryConnection repositoryCon = repository.getConnection(); */ + + + Object queryResult = null; + FileFormatServiceRegistry registry; + try { + if (query instanceof BooleanQuery) { + BooleanQuery bQuery = (BooleanQuery) query; + queryResult = headersOnly ? null : bQuery.evaluate(); + registry = BooleanQueryResultWriterRegistry.getInstance(); + } + else { + throw new ClientHTTPException(SC_BAD_REQUEST, + "Unsupported query type: " + query.getClass().getName()); + } + } + catch (QueryInterruptedException e) { + throw new ServerHTTPException(SC_SERVICE_UNAVAILABLE, "Query evaluation took too long"); + } + catch (QueryEvaluationException e) { + if (e.getCause() != null && e.getCause() instanceof HTTPException) { + throw (HTTPException) e.getCause(); + } + else { + throw new ServerHTTPException("Query evaluation error: " + e.getMessage()); + } + } + + return (Query) queryResult; } From e13d01bbdcb85b2a5e9057f3d3173e1c3b6a156e Mon Sep 17 00:00:00 2001 From: Oleg Gritchin Date: Thu, 27 Jun 2019 18:11:09 +0300 Subject: [PATCH 2/6] new good job --- .../server/repository/RepositoryController.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java index 8fb55ad..d9498ec 100644 --- a/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java +++ b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java @@ -92,22 +92,6 @@ public RepositoryController() { System.out.println("Init RepositoryController"); } - /* - @GET - @Path("/repositories/{repId}") - @Produces({"application/json", "application/sparql-results+json"}) - public boolean get(@Context UriInfo uriInfo, @PathParam("repId") String repId, - @QueryParam("query") String query, @QueryParam("queryLn") String queryLn, - @QueryParam("queryLn") String infer, @QueryParam("queryLn") String timeout, - @QueryParam("queryLn") String distinct, @QueryParam("queryLn") String limit, - @QueryParam("queryLn") String offset) throws WebApplicationException { - System.out.println("RepositoryController.get"); - System.out.println("repId=" + repId); - System.out.println("query=" + query); - - return true; - }*/ - @GET @Path("/repositories/{repId}") @Produces({"application/json", "application/sparql-results+json"}) From ab59595c950549cbf936f24336df592f1d254d2a Mon Sep 17 00:00:00 2001 From: Oleg Gritchin Date: Thu, 27 Jun 2019 18:26:42 +0300 Subject: [PATCH 3/6] another one --- .../repository/RepositoryController.java | 42 +------------------ 1 file changed, 2 insertions(+), 40 deletions(-) diff --git a/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java index d9498ec..2b1f95b 100644 --- a/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java +++ b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryController.java @@ -7,14 +7,10 @@ *******************************************************************************/ package org.eclipse.rdf4j.http.server.repository; -import java.io.ByteArrayInputStream; + import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; - -import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.FormParam; @@ -28,15 +24,10 @@ import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; - import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; import static javax.servlet.http.HttpServletResponse.SC_SERVICE_UNAVAILABLE; - -import org.apache.http.HttpStatus; -import org.apache.http.util.ByteArrayBuffer; import org.eclipse.rdf4j.RDF4JException; import org.eclipse.rdf4j.common.lang.FileFormat; import org.eclipse.rdf4j.common.lang.service.FileFormatServiceRegistry; @@ -44,28 +35,15 @@ import org.eclipse.rdf4j.http.server.ClientHTTPException; import org.eclipse.rdf4j.http.server.HTTPException; import org.eclipse.rdf4j.http.server.ServerHTTPException; -import org.eclipse.rdf4j.model.IRI; -import org.eclipse.rdf4j.model.Model; -import org.eclipse.rdf4j.model.ValueFactory; import org.eclipse.rdf4j.query.BooleanQuery; import org.eclipse.rdf4j.query.Query; import org.eclipse.rdf4j.query.QueryEvaluationException; import org.eclipse.rdf4j.query.QueryInterruptedException; import org.eclipse.rdf4j.query.QueryLanguage; import org.eclipse.rdf4j.query.resultio.BooleanQueryResultWriterRegistry; -import org.eclipse.rdf4j.repository.Repository; -import org.eclipse.rdf4j.repository.RepositoryConnection; -import org.eclipse.rdf4j.repository.RepositoryException; import org.eclipse.rdf4j.repository.config.ConfigTemplate; import org.eclipse.rdf4j.repository.config.RepositoryConfig; -import org.eclipse.rdf4j.repository.config.RepositoryConfigUtil; - import org.eclipse.rdf4j.repository.manager.RepositoryManager; -import org.eclipse.rdf4j.repository.manager.SystemRepository; -import org.eclipse.rdf4j.rio.RDFFormat; -import org.eclipse.rdf4j.rio.RDFParseException; -import org.eclipse.rdf4j.rio.Rio; -import org.eclipse.rdf4j.rio.UnsupportedRDFormatException; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; @@ -105,25 +83,9 @@ public Query get(@Context UriInfo uriInfo, @PathParam("repId") String repId, System.out.println("query=" + query); boolean headersOnly = false; - - /* ConfigTemplate ct = rcc.getConfigTemplate("native"); - System.out.println("ConfigTemplate: " + ct); - - Map queryParams = new HashMap<>(); - queryParams.put("Repository ID", repId); - String strConfTemplate = ct.render(queryParams); - System.out.println("ConfigTemplate render: " + strConfTemplate); - RepositoryConfig rc = rcc.updateRepositoryConfig(strConfTemplate); - System.out.println("RepositoryConfig.id: " + rc.getID()); - System.out.println("RepositoryConfig: " + rc.toString()); - - Repository repository = repositoryManager.getRepository(repId); - repository.init(); - RepositoryConnection repositoryCon = repository.getConnection(); */ - - Object queryResult = null; FileFormatServiceRegistry registry; + try { if (query instanceof BooleanQuery) { BooleanQuery bQuery = (BooleanQuery) query; From afa9a9f43762fae718e88c25cf07cf6b58bbb778 Mon Sep 17 00:00:00 2001 From: Oleg Gritchin Date: Fri, 28 Jun 2019 20:05:43 +0300 Subject: [PATCH 4/6] added test --- .../example/myproject/test/olegger_test.java | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java diff --git a/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java new file mode 100644 index 0000000..b88e3ee --- /dev/null +++ b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java @@ -0,0 +1,134 @@ +package com.example.myproject.test; + +import static org.junit.Assert.*; +import static org.ops4j.pax.exam.CoreOptions.*; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; + +import jdk.nashorn.internal.ir.annotations.Reference; +import org.eclipse.rdf4j.http.server.repository.RepositoryConfigController; +import org.eclipse.rdf4j.http.server.repository.RepositoryController; +import org.eclipse.rdf4j.http.server.transaction.ActiveTransactionRegistry; +import org.eclipse.rdf4j.http.server.transaction.TransactionQuery; +import org.eclipse.rdf4j.model.Model; +import org.eclipse.rdf4j.model.util.ModelBuilder; +import org.eclipse.rdf4j.model.vocabulary.FOAF; +import org.eclipse.rdf4j.model.vocabulary.RDF; +import org.eclipse.rdf4j.query.Update; +import org.eclipse.rdf4j.repository.Repository; +import org.eclipse.rdf4j.repository.RepositoryConnection; +import org.eclipse.rdf4j.repository.RepositoryException; +import org.eclipse.rdf4j.repository.config.ConfigTemplate; +import org.eclipse.rdf4j.repository.config.RepositoryConfig; +import org.eclipse.rdf4j.repository.manager.RepositoryManager; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.ops4j.pax.exam.Configuration; +import org.ops4j.pax.exam.Option; +import org.ops4j.pax.exam.junit.PaxExam; +import org.ops4j.pax.exam.karaf.options.LogLevelOption; +import org.ops4j.pax.exam.options.MavenArtifactUrlReference; +import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; +import org.ops4j.pax.exam.spi.reactors.PerClass; +import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.features; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.ProtocolException; +import java.net.URL; +import java.net.URLConnection; +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; +import java.util.Vector; +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; + +import org.apache.karaf.itests.KarafTestSupport; +import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.*; + + +@RunWith(PaxExam.class) +@ExamReactorStrategy(PerClass.class) +public class olegger_test extends KarafTestSupport { + + //@Inject + //private RepositoryManager manager; + + @Override + @Configuration + public Option[] config() { + MavenArtifactUrlReference karafUrl = maven().groupId("org.apache.karaf").artifactId("apache-karaf").versionAsInProject().type("tar.gz"); + + String httpPort = "8181"; + String rmiRegistryPort = Integer.toString(getAvailablePort(Integer.parseInt(MIN_RMI_REG_PORT), Integer.parseInt(MAX_RMI_REG_PORT))); + String rmiServerPort = Integer.toString(getAvailablePort(Integer.parseInt(MIN_RMI_SERVER_PORT), Integer.parseInt(MAX_RMI_SERVER_PORT))); + String sshPort = Integer.toString(getAvailablePort(Integer.parseInt(MIN_SSH_PORT), Integer.parseInt(MAX_SSH_PORT))); + String localRepository = System.getProperty("org.ops4j.pax.url.mvn.localRepository"); + if (localRepository == null) { + localRepository = ""; + } + + return new Option[] { + //KarafDistributionOption.debugConfiguration("8889", true), + karafDistributionConfiguration().frameworkUrl(karafUrl).name("Apache Karaf").unpackDirectory(new File("target/exam")), + // enable JMX RBAC security, thanks to the KarafMBeanServerBuilder + configureSecurity().disableKarafMBeanServerBuilder(), + keepRuntimeFolder(), + logLevel(LogLevelOption.LogLevel.INFO), + mavenBundle().groupId("org.awaitility").artifactId("awaitility").versionAsInProject(), + mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.hamcrest").versionAsInProject(), + mavenBundle().groupId("org.apache.karaf.itests").artifactId("common").versionAsInProject(), + features(maven().groupId("ru.agentlab.rdf4j.server") + .artifactId("ru.agentlab.rdf4j.server.features").type("xml") + .version("0.0.1-SNAPSHOT"), "org.eclipse.rdf4j.jaxrs"), + junitBundles(), + editConfigurationFilePut("etc/org.ops4j.pax.web.cfg", "org.osgi.service.http.port", httpPort), + editConfigurationFilePut("etc/org.apache.karaf.management.cfg", "rmiRegistryPort", rmiRegistryPort), + editConfigurationFilePut("etc/org.apache.karaf.management.cfg", "rmiServerPort", rmiServerPort), + editConfigurationFilePut("etc/org.apache.karaf.shell.cfg", "sshPort", sshPort), + editConfigurationFilePut("etc/org.ops4j.pax.url.mvn.cfg", "org.ops4j.pax.url.mvn.localRepository", localRepository) + }; + } + + + @Test + public void getQueryTest1() throws Exception { + + URL url = new URL("http://localhost:8181/rdf4j2-server/repositories/rpotest?query=ask%20{?s%20?p%20?o}"); + URLConnection conn = url.openConnection(); + + InputStream input = conn.getInputStream(); + + String inputStr = input.toString(); + + if (inputStr != "true") { + fail("Транзакция не успешна"); + } + + } + + @Test + public void getQueryTest2() throws Exception { + + URL url = new URL("http://localhost:8181/rdf4j2-server/repositories/rpotest?query=construct"); + URLConnection conn = url.openConnection(); + + InputStream input = conn.getInputStream(); + + String inputStr = input.toString(); + + if (inputStr == "true") { + fail("Транзакция успешна"); + } + + } +} \ No newline at end of file From 5ea480bdf94e283bd1579d50a094454186a59299 Mon Sep 17 00:00:00 2001 From: Oleg Gritchin Date: Fri, 28 Jun 2019 20:10:50 +0300 Subject: [PATCH 5/6] added test --- .../test/java/com/example/myproject/test/olegger_test.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java index b88e3ee..1ec58e6 100644 --- a/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java +++ b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java @@ -111,7 +111,7 @@ public void getQueryTest1() throws Exception { String inputStr = input.toString(); if (inputStr != "true") { - fail("Транзакция не успешна"); + fail("Запрос не выполнен"); } } @@ -127,7 +127,7 @@ public void getQueryTest2() throws Exception { String inputStr = input.toString(); if (inputStr == "true") { - fail("Транзакция успешна"); + fail("Запрос выполнен успешно"); } } From 3b59e6fdd29bf3e804a8bc47815b7e5a8abb0d5d Mon Sep 17 00:00:00 2001 From: Oleg Gritchin Date: Fri, 28 Jun 2019 21:24:11 +0300 Subject: [PATCH 6/6] added test --- .../example/myproject/test/olegger_test.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java index 1ec58e6..5abc9ca 100644 --- a/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java +++ b/org.eclipse.rdf4j.jaxrs/org.eclipse.rdf4j/org.eclipse.rdf4j.jaxrs/src/test/java/com/example/myproject/test/olegger_test.java @@ -7,6 +7,8 @@ import javax.servlet.http.HttpServletRequest; import jdk.nashorn.internal.ir.annotations.Reference; +import shaded.org.apache.commons.io.IOUtils; + import org.eclipse.rdf4j.http.server.repository.RepositoryConfigController; import org.eclipse.rdf4j.http.server.repository.RepositoryController; import org.eclipse.rdf4j.http.server.transaction.ActiveTransactionRegistry; @@ -40,6 +42,9 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; @@ -105,12 +110,13 @@ public void getQueryTest1() throws Exception { URL url = new URL("http://localhost:8181/rdf4j2-server/repositories/rpotest?query=ask%20{?s%20?p%20?o}"); URLConnection conn = url.openConnection(); + InputStream inputStream = conn.getInputStream(); - InputStream input = conn.getInputStream(); - - String inputStr = input.toString(); + StringWriter writer = new StringWriter(); + IOUtils.copy(inputStream, writer, "UTF-8"); + String line = writer.toString(); - if (inputStr != "true") { + if (line.contains("false")) { fail("Запрос не выполнен"); } @@ -119,16 +125,16 @@ public void getQueryTest1() throws Exception { @Test public void getQueryTest2() throws Exception { - URL url = new URL("http://localhost:8181/rdf4j2-server/repositories/rpotest?query=construct"); + URL url = new URL("http://localhost:8181/rdf4j2-server/repositories/rpotest?query=ask%20{?s%20?p%20?o}"); URLConnection conn = url.openConnection(); + InputStream inputStream = conn.getInputStream(); - InputStream input = conn.getInputStream(); - - String inputStr = input.toString(); - - if (inputStr == "true") { - fail("Запрос выполнен успешно"); - } + StringWriter writer = new StringWriter(); + IOUtils.copy(inputStream, writer, "UTF-8"); + String line = writer.toString(); + if (line.contains("true")) { + fail("Запрос выполнен, но не должен был"); + } } } \ No newline at end of file