public void AccessTokenRefreshTest() { var request = new Mock <HttpWebRequest>(); request.Setup(obj => obj.RequestUri).Returns(new Uri("https://demo.eduvpn.nl/portal/oauth.php/token")); request.SetupSet(obj => obj.Method = "POST"); request.SetupProperty(obj => obj.Credentials); request.SetupProperty(obj => obj.PreAuthenticate, false); request.SetupSet(obj => obj.ContentType = "application/x-www-form-urlencoded"); request.SetupProperty(obj => obj.ContentLength); var request_buffer = new byte[1048576]; request.Setup(obj => obj.GetRequestStream()).Returns(new MemoryStream(request_buffer, true)); var response = new Mock <HttpWebResponse>(); response.Setup(obj => obj.GetResponseStream()).Returns(new MemoryStream(Encoding.UTF8.GetBytes(Global.AccessTokenJSON))); response.SetupGet(obj => obj.StatusCode).Returns(HttpStatusCode.OK); request.Setup(obj => obj.GetResponse()).Returns(response.Object); AccessToken token1 = new BearerToken(Global.AccessTokenObj, DateTimeOffset.Now), token2 = token1.RefreshToken(request.Object, new NetworkCredential("username", "password")); var request_param = HttpUtility.ParseQueryString(Encoding.ASCII.GetString(request_buffer, 0, (int)request.Object.ContentLength)); Assert.AreEqual("refresh_token", request_param["grant_type"]); Assert.IsNotNull(request_param["refresh_token"]); Assert.IsTrue((token1.Scope == null) == (request_param["scope"] == null)); Assert.IsTrue(token1.Scope == null || token1.Scope.SetEquals(new HashSet <string>(request_param["scope"].Split(null)))); Assert.AreEqual(token1, token2); Assert.IsTrue(token1.Authorized == token2.Authorized); Assert.IsTrue((token1.Expires - token2.Expires).TotalSeconds < 60); Assert.IsTrue((token1.Scope == null) == (token2.Scope == null)); Assert.IsTrue(token1.Scope == null || token1.Scope.SetEquals(token2.Scope)); }