twitter-archive / diffy

Find potential bugs in your services with Diffy
https://twitter.com/diffyproject
Apache License 2.0
3.83k stars 368 forks source link

Diffy proxy working, not showing any results. #54

Closed matth0x1 closed 4 years ago

matth0x1 commented 7 years ago

The service I'm testing accepts a POST request; I have set -allowHttpSideEffects=true I have tested each of these services without the diffy proxy and received the expected responses.

The candidate, primary and secondary services are all receiving the POST requests when I send them to the diffy proxy. I understand that the client talking to the diffy proxy is not going to receive a response.

image

No results are showing. Am I missing something?

On the metrics page http://localhost:31159/admin/metrics#clnt/primary/requests I can see a bar that rises when I send a request to the diffie proxy for each of the services; candidate, primary and secondary. Same for the recieved_bytes metric.

Below is the output from from running the jar file:

$ java -jar diffy-server.jar -candidate=localhost:44310 -master.primary=localhost:44311 -master.secondary=localhost:44312 -serviceName=XmlServer -service.protocol=http -proxy.port=:44333 -admin.port=:31159 -http.port=:31149 -rootUrl='localhost:31149' -allowHttpSideEffects=true
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
I 1207 12:47:52.871 THREAD1: HttpMuxer[/admin/metrics.json] = com.twitter.finagle.stats.MetricsExporter(<function1>)
I 1207 12:47:52.904 THREAD1: HttpMuxer[/admin/per_host_metrics.json] = com.twitter.finagle.stats.HostMetricsExporter(<function1>)
I 1207 12:47:52.966 THREAD1: /admin => com.twitter.server.handler.SummaryHandler
I 1207 12:47:52.967 THREAD1: /admin/server_info => com.twitter.finagle.Filter$$anon$2
I 1207 12:47:52.967 THREAD1: /admin/contention => com.twitter.finagle.Filter$$anon$2
I 1207 12:47:52.967 THREAD1: /admin/threads => com.twitter.server.handler.ThreadsHandler
I 1207 12:47:52.967 THREAD1: /admin/threads.json => com.twitter.server.handler.ThreadsHandler
I 1207 12:47:52.967 THREAD1: /admin/announcer => com.twitter.finagle.Filter$$anon$2
I 1207 12:47:52.967 THREAD1: /admin/dtab => com.twitter.finagle.Filter$$anon$2
I 1207 12:47:52.968 THREAD1: /admin/pprof/heap => com.twitter.server.handler.HeapResourceHandler
I 1207 12:47:52.968 THREAD1: /admin/pprof/profile => com.twitter.server.handler.ProfileResourceHandler
I 1207 12:47:52.968 THREAD1: /admin/pprof/contention => com.twitter.server.handler.ProfileResourceHandler
I 1207 12:47:52.968 THREAD1: /admin/ping => com.twitter.server.handler.ReplyHandler
I 1207 12:47:52.968 THREAD1: /admin/shutdown => com.twitter.server.handler.ShutdownHandler
I 1207 12:47:52.968 THREAD1: /admin/tracing => com.twitter.server.handler.TracingHandler
I 1207 12:47:52.969 THREAD1: /admin/events => com.twitter.server.handler.EventsHandler
I 1207 12:47:52.969 THREAD1: /admin/logging => com.twitter.server.handler.LoggingHandler
I 1207 12:47:52.969 THREAD1: /admin/metrics => com.twitter.server.handler.MetricQueryHandler
I 1207 12:47:52.969 THREAD1: /admin/clients/ => com.twitter.server.handler.ClientRegistryHandler
I 1207 12:47:52.971 THREAD1: /admin/servers/ => com.twitter.server.handler.ServerRegistryHandler
I 1207 12:47:52.971 THREAD1: /admin/files/ => com.twitter.server.handler.ResourceHandler
I 1207 12:47:52.971 THREAD1: /admin/registry.json => com.twitter.server.handler.RegistryHandler
I 1207 12:47:52.975 THREAD1: Serving admin http on 0.0.0.0/0.0.0.0:31159
I 1207 12:47:53.004 THREAD1: Finagle version 6.28.0 (rev=de123b8f9d074c4e345ebd67e1a0e870bb921544) built at 20150827-162434
I 1207 12:47:54.275 THREAD1: networkaddress.cache.ttl is not set, DNS cache refresh turned off
I 1207 12:47:54.767 THREAD1: Tracer: com.twitter.finagle.zipkin.thrift.SamplingTracer
I 1207 12:47:55.063 THREAD1: zipkin-tracer resolved to Addr.Bound, current size=1
I 1207 12:47:55.063 THREAD1: candidate resolved to Addr.Bound, current size=2
I 1207 12:47:55.063 THREAD1: primary resolved to Addr.Bound, current size=2
I 1207 12:47:55.063 THREAD1: secondary resolved to Addr.Bound, current size=2
I 1207 12:47:55.170 THREAD1: Scheduling com.twitter.diffy.workflow.FunctionalReport at 2016-12-07 12:47:55 +0000
puneetkhanduri commented 7 years ago

Can you go to http://localhost:31159/admin/logging and turn on the debug logs for DiffyProxy. I suspect Diffy may be encountering either dom parsing errors or networking errors.

matth0x1 commented 7 years ago

I get the following in STOUT.

D 1208 12:03:21.394 THREAD22: success networking
D 1208 12:03:21.394 THREAD22: error lifting
java.lang.Exception: Content type: text/xml is not supported
    at com.twitter.diffy.lifter.HttpLifter$.contentTypeNotSupportedException(HttpLifter.scala:15)
    at com.twitter.diffy.lifter.HttpLifter$.contentTypeNotSupportedExceptionFuture(HttpLifter.scala:16)
    at com.twitter.diffy.lifter.HttpLifter$$anonfun$liftResponse$1.apply(HttpLifter.scala:112)
    at com.twitter.diffy.lifter.HttpLifter$$anonfun$liftResponse$1.apply(HttpLifter.scala:49)
    at com.twitter.util.Future$$anonfun$flatMap$1.apply(Future.scala:890)
    at com.twitter.util.Future$$anonfun$flatMap$1.apply(Future.scala:889)
    at com.twitter.util.ConstFuture$$anon$6.run(Future.scala:1266)
    at com.twitter.concurrent.LocalScheduler$Activation.run(Scheduler.scala:193)
    at com.twitter.concurrent.LocalScheduler$Activation.submit(Scheduler.scala:140)
    at com.twitter.concurrent.LocalScheduler.submit(Scheduler.scala:222)
    at com.twitter.concurrent.Scheduler$.submit(Scheduler.scala:84)
    at com.twitter.util.Promise.runq(Promise.scala:342)
    at com.twitter.util.Promise.updateIfEmpty(Promise.scala:713)
    at com.twitter.util.Promise.update(Promise.scala:686)
    at com.twitter.util.Promise.setValue(Promise.scala:662)
    at com.twitter.concurrent.AsyncQueue.offer(AsyncQueue.scala:88)
    at com.twitter.finagle.netty3.transport.ChannelTransport.handleUpstream(ChannelTransport.scala:51)
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
    at org.jboss.netty.handler.codec.http.HttpContentDecoder.messageReceived(HttpContentDecoder.java:108)
    at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
    at org.jboss.netty.handler.codec.http.HttpChunkAggregator.messageReceived(HttpChunkAggregator.java:145)
    at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
    at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:459)
    at org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:536)
    at org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:435)
    at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
    at org.jboss.netty.handler.codec.http.HttpClientCodec.handleUpstream(HttpClientCodec.java:92)
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
    at org.jboss.netty.channel.SimpleChannelHandler.messageReceived(SimpleChannelHandler.java:142)
    at com.twitter.finagle.netty3.channel.ChannelStatsHandler.messageReceived(ChannelStatsHandler.scala:80)
    at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:88)
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
    at org.jboss.netty.channel.SimpleChannelHandler.messageReceived(SimpleChannelHandler.java:142)
    at com.twitter.finagle.netty3.channel.ChannelRequestStatsHandler.messageReceived(ChannelRequestStatsHandler.scala:35)
    at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:88)
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337)
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
    at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
    at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

I can confirm the content type of the API I'm testing is text/xml.

puneetkhanduri commented 7 years ago

Looks like you will need to add support for "text/xml" content type in HttpLifter.

anton1r commented 7 years ago

Hey @matth0x1, I forked and put in a tiny tweek to make it diff xml. It's not perfect but it works if you want to try it out... https://github.com/anton1r/diffy

benjamin-bergia commented 5 years ago

Is there any solution to this? I am having the same issue

puneetkhanduri commented 5 years ago

Please migrate to https://github.com/opendiffy/diffy - it has xml diff support and many other upgrades and fixes.