public void GetGreeting_Async_ServerError()
        {
            RestClient client = new RestClient(urlPrefix);

            GetRequestBuilder <int, Greeting> requestBuilder = new GetRequestBuilder <int, Greeting>("/basicCollection");

            requestBuilder.SetID(-1);
            GetRequest <int, Greeting> request = requestBuilder.Build();

            AutoResetEvent blocker = new AutoResetEvent(false);

            Greeting            greeting      = null;
            ClientErrorResponse errorResponse = null;

            RestliCallback <EntityResponse <Greeting> > .SuccessHandler successHandler = delegate(EntityResponse <Greeting> response)
            {
                greeting = response.element;
                blocker.Set();
            };
            RestliCallback <EntityResponse <Greeting> > .ErrorHandler errorHandler = delegate(ClientErrorResponse response)
            {
                errorResponse = response;
                blocker.Set();
            };
            RestliCallback <EntityResponse <Greeting> > callback = new RestliCallback <EntityResponse <Greeting> >(successHandler, errorHandler);

            client.RestRequestAsync(request, callback);

            blocker.WaitOne();

            Assert.IsNull(greeting);
            Assert.IsNotNull(errorResponse);
            Assert.AreEqual(400, errorResponse.status);

            RestliException error = errorResponse.error;

            Assert.IsNotNull(error);
            Assert.IsNotNull(error.Message);
            Assert.IsNull(error.InnerException);

            ErrorResponse details = error.details;

            Assert.IsNotNull(details);
            Assert.AreEqual(400, details.status);
            Assert.AreEqual("Negative key.", details.message);
            Assert.AreEqual("com.linkedin.restli.server.RestLiServiceException", details.exceptionClass);
            Assert.IsTrue(details.hasStackTrace);
        }
        public void CreateGreeting_Async()
        {
            RestClient client = new RestClient(urlPrefix);

            GreetingBuilder greetingBuilder = new GreetingBuilder();

            greetingBuilder.id      = 0; // Dummy value
            greetingBuilder.message = "Create me!";
            greetingBuilder.tone    = new Tone(Tone.Symbol.FRIENDLY);
            Greeting input = greetingBuilder.Build();

            CreateRequestBuilder <int, Greeting> requestBuilder = new CreateRequestBuilder <int, Greeting>("/basicCollection");

            requestBuilder.input = input;
            CreateRequest <int, Greeting> request = requestBuilder.Build();

            AutoResetEvent blocker = new AutoResetEvent(false);

            CreateResponse <int, Greeting> createResponse = null;
            ClientErrorResponse            errorResponse  = null;

            RestliCallback <CreateResponse <int, Greeting> > .SuccessHandler successHandler = delegate(CreateResponse <int, Greeting> response)
            {
                createResponse = response;
                blocker.Set();
            };
            RestliCallback <CreateResponse <int, Greeting> > .ErrorHandler errorHandler = delegate(ClientErrorResponse response)
            {
                errorResponse = response;
                blocker.Set();
            };
            RestliCallback <CreateResponse <int, Greeting> > callback = new RestliCallback <CreateResponse <int, Greeting> >(successHandler, errorHandler);

            client.RestRequestAsync(request, callback);

            blocker.WaitOne(asyncTimeoutMillis);

            Assert.IsNull(errorResponse);
            Assert.AreEqual(RestConstants.httpStatusCreated, createResponse.status);
            Assert.AreEqual(123, createResponse.key);
            CollectionAssert.AreEqual(new List <string>()
            {
                "/basicCollection/123"
            }, createResponse.headers[RestConstants.kHeaderLocation].ToList());
        }
        public void FinderGreeting_Async()
        {
            RestClient client = new RestClient(urlPrefix);

            FinderRequestBuilder <Greeting, EmptyRecord> requestBuilder = new FinderRequestBuilder <Greeting, EmptyRecord>("/basicCollection");

            requestBuilder.Name("search");
            requestBuilder.SetParam("tone", Tone.Symbol.FRIENDLY);
            FinderRequest <Greeting, EmptyRecord> request = requestBuilder.Build();

            AutoResetEvent blocker = new AutoResetEvent(false);

            CollectionResponse <Greeting, EmptyRecord> collectionResponse = null;
            ClientErrorResponse errorResponse = null;

            RestliCallback <CollectionResponse <Greeting, EmptyRecord> > .SuccessHandler successHandler = delegate(CollectionResponse <Greeting, EmptyRecord> response)
            {
                collectionResponse = response;
                blocker.Set();
            };
            RestliCallback <CollectionResponse <Greeting, EmptyRecord> > .ErrorHandler errorHandler = delegate(ClientErrorResponse response)
            {
                errorResponse = response;
                blocker.Set();
            };
            RestliCallback <CollectionResponse <Greeting, EmptyRecord> > callback = new RestliCallback <CollectionResponse <Greeting, EmptyRecord> >(successHandler, errorHandler);

            client.RestRequestAsync(request, callback);

            blocker.WaitOne(asyncTimeoutMillis);

            Assert.IsNull(errorResponse);

            IReadOnlyList <Greeting> greetings = collectionResponse.elements;

            Assert.IsTrue(greetings.Count() > 0);
            Assert.IsTrue(greetings.All(_ => _.message.Equals("search") && _.tone.symbol == Tone.Symbol.FRIENDLY));
            Assert.AreEqual(10, collectionResponse.paging.count);
            Assert.AreEqual(0, collectionResponse.paging.start);
            CollectionAssert.AllItemsAreInstancesOfType(collectionResponse.paging.links.ToList(), typeof(Link));
            Assert.AreEqual("application/json", collectionResponse.paging.links[0].type);
        }
        public void GetGreeting_Async_HttpError()
        {
            RestClient client = new RestClient(badUrlPrefix);

            GetRequestBuilder <int, Greeting> requestBuilder = new GetRequestBuilder <int, Greeting>("/basicCollection");

            requestBuilder.SetID(123);
            GetRequest <int, Greeting> request = requestBuilder.Build();

            AutoResetEvent blocker = new AutoResetEvent(false);

            Greeting            greeting      = null;
            ClientErrorResponse errorResponse = null;

            RestliCallback <EntityResponse <Greeting> > .SuccessHandler successHandler = delegate(EntityResponse <Greeting> response)
            {
                greeting = response.element;
                blocker.Set();
            };
            RestliCallback <EntityResponse <Greeting> > .ErrorHandler errorHandler = delegate(ClientErrorResponse response)
            {
                errorResponse = response;
                blocker.Set();
            };
            RestliCallback <EntityResponse <Greeting> > callback = new RestliCallback <EntityResponse <Greeting> >(successHandler, errorHandler);

            client.RestRequestAsync(request, callback);

            blocker.WaitOne();

            Assert.IsNull(greeting);
            Assert.IsNotNull(errorResponse);
            Assert.AreEqual(500, errorResponse.status);

            Assert.IsNotNull(errorResponse.error);
            Assert.IsNull(errorResponse.error.details);
            Assert.IsNotNull(errorResponse.error.Message);
            Assert.IsNotNull(errorResponse.error.InnerException);
        }
        public void GetGreeting_Async()
        {
            RestClient client = new RestClient(urlPrefix);

            GetRequestBuilder <int, Greeting> requestBuilder = new GetRequestBuilder <int, Greeting>("/basicCollection");

            requestBuilder.SetID(123);
            GetRequest <int, Greeting> request = requestBuilder.Build();

            AutoResetEvent blocker = new AutoResetEvent(false);

            Greeting            greeting      = null;
            ClientErrorResponse errorResponse = null;

            RestliCallback <EntityResponse <Greeting> > .SuccessHandler successHandler = delegate(EntityResponse <Greeting> response)
            {
                greeting = response.element;
                blocker.Set();
            };
            RestliCallback <EntityResponse <Greeting> > .ErrorHandler errorHandler = delegate(ClientErrorResponse response)
            {
                errorResponse = response;
                blocker.Set();
            };
            RestliCallback <EntityResponse <Greeting> > callback = new RestliCallback <EntityResponse <Greeting> >(successHandler, errorHandler);

            client.RestRequestAsync(request, callback);

            blocker.WaitOne(asyncTimeoutMillis);

            Assert.IsNull(errorResponse);
            Assert.IsNotNull(greeting);

            Assert.AreEqual(123, greeting.id);
            Assert.AreEqual(Tone.Symbol.SINCERE, greeting.tone.symbol);
            Assert.AreEqual("Hello World!", greeting.message);
        }
 public RestliCallbackAdapter(RestResponseDecoder <TResponse> responseDecoder, RestliCallback <TResponse> callback)
 {
     this.responseDecoder = responseDecoder;
     this.callback        = callback;
 }