public async Task GetVariableValueAsyncHttpRequestExceptionTest()
        {
            using (ParticleCloudMock cloud = new ParticleCloudMock())
            {
                var ex = new HttpRequestException("Unable to resolve");
                cloud.RequestCallBack = (a, b, c) =>
                {
                    throw ex;
                };

                var p = new ParticleDeviceMock(cloud, JObject.Parse("{'id':'3', 'name': 'test', 'variables':{'temp':'int'}}"));
                Assert.IsNotNull(p);
                var vv = await p.GetVariableValueAsync("Test");

                Assert.IsNotNull(vv);
                Assert.IsFalse(vv.Success);
                Assert.AreEqual(ex.Message, vv.Error);
                Assert.AreEqual(ex, vv.Exception);
            }
        }
		public async Task GetVariableValueAsyncHttpRequestExceptionTest()
		{
			using (ParticleCloudMock cloud = new ParticleCloudMock())
			{
				var ex = new HttpRequestException("Unable to resolve");
				cloud.RequestCallBack = (a, b, c) =>
				{
					throw ex;
				};

				var p = new ParticleDeviceMock(cloud, JObject.Parse("{'id':'3', 'name': 'test', 'variables':{'temp':'int'}}"));
				Assert.IsNotNull(p);
				var vv = await p.GetVariableValueAsync("Test");
				Assert.IsNotNull(vv);
				Assert.IsFalse(vv.Success);
				Assert.AreEqual(ex.Message, vv.Error);
				Assert.AreEqual(ex, vv.Exception);
			}
		}
		public async Task GetVariableValueAsyncTest()
		{
			ParticleCloudMock cloud = new ParticleCloudMock();
			cloud.RequestCallBack = (a, b, c) =>
			{
				Assert.AreEqual("GET", a);
				Assert.AreEqual("devices/3/temp", b);
				return new RequestResponse
				{
					StatusCode = System.Net.HttpStatusCode.OK,
					Response = JToken.Parse(@"{'name': 'temp',
  'result': 300,
  'coreInfo': {
						'name': 'weatherman',
						'deviceID': '0123456789abcdef01234567',
						'connected': true,
						'last_handshake_at': '2015-07-17T22:28:40.907Z',
						'last_app': ''
					}}")
				};
			};

			var p = new ParticleDeviceMock(cloud, JObject.Parse("{'id':'3', 'name': 'test', 'variables':{'temp':'int'}}"));

			var ex = Assert.Throws<ArgumentNullException>(() => { p.GetVariableValueAsync((String)null).GetAwaiter().GetResult(); });
			Assert.AreEqual("variable", ex.ParamName);
			ex = Assert.Throws<ArgumentNullException>(() => { p.GetVariableValueAsync((Variable)null).GetAwaiter().GetResult(); });
			Assert.AreEqual("variable", ex.ParamName);

			var results = await p.GetVariableValueAsync("temp");
			Assert.IsTrue(results.Success);
			Assert.IsNotNull(results.Data);
			var variable = results.Data;
			Assert.AreEqual("temp", variable.Name);
			Assert.AreEqual("300", variable.Value);

			cloud.RequestCallBack = (a, b, c) =>
			{
				Assert.AreEqual("GET", a);
				Assert.AreEqual("devices/3/temp", b);
				return new RequestResponse
				{
					StatusCode = System.Net.HttpStatusCode.OK,
					Response = JToken.Parse(@"{'name': 'temp',
  'result': 23,
  'coreInfo': {
						'name': 'weatherman',
						'deviceID': '0123456789abcdef01234567',
						'connected': true,
						'last_handshake_at': '2015-07-17T22:28:40.907Z',
						'last_app': ''
					}}")
				};
			};

			results = await p.GetVariableValueAsync(variable);
			Assert.IsTrue(results.Success);
			Assert.IsNotNull(results.Data);
			variable = results.Data;
			Assert.AreEqual("temp", variable.Name);
			Assert.AreEqual("23", variable.Value);
		}
        public async Task GetVariableValueAsyncTest()
        {
            ParticleCloudMock cloud = new ParticleCloudMock();

            cloud.RequestCallBack = (a, b, c) =>
            {
                Assert.AreEqual("GET", a);
                Assert.AreEqual("devices/3/temp", b);
                return(new RequestResponse
                {
                    StatusCode = System.Net.HttpStatusCode.OK,
                    Response = JToken.Parse(@"{'name': 'temp',
  'result': 300,
  'coreInfo': {
						'name': 'weatherman',
						'deviceID': '0123456789abcdef01234567',
						'connected': true,
						'last_handshake_at': '2015-07-17T22:28:40.907Z',
						'last_app': ''
					}}"                    )
                });
            };

            var p = new ParticleDeviceMock(cloud, JObject.Parse("{'id':'3', 'name': 'test', 'variables':{'temp':'int'}}"));

            var ex = Assert.Throws <ArgumentNullException>(() => { p.GetVariableValueAsync((String)null).GetAwaiter().GetResult(); });

            Assert.AreEqual("variable", ex.ParamName);
            ex = Assert.Throws <ArgumentNullException>(() => { p.GetVariableValueAsync((Variable)null).GetAwaiter().GetResult(); });
            Assert.AreEqual("variable", ex.ParamName);

            var results = await p.GetVariableValueAsync("temp");

            Assert.IsTrue(results.Success);
            Assert.IsNotNull(results.Data);
            var variable = results.Data;

            Assert.AreEqual("temp", variable.Name);
            Assert.AreEqual("300", variable.Value);

            cloud.RequestCallBack = (a, b, c) =>
            {
                Assert.AreEqual("GET", a);
                Assert.AreEqual("devices/3/temp", b);
                return(new RequestResponse
                {
                    StatusCode = System.Net.HttpStatusCode.OK,
                    Response = JToken.Parse(@"{'name': 'temp',
  'result': 23,
  'coreInfo': {
						'name': 'weatherman',
						'deviceID': '0123456789abcdef01234567',
						'connected': true,
						'last_handshake_at': '2015-07-17T22:28:40.907Z',
						'last_app': ''
					}}"                    )
                });
            };

            results = await p.GetVariableValueAsync(variable);

            Assert.IsTrue(results.Success);
            Assert.IsNotNull(results.Data);
            variable = results.Data;
            Assert.AreEqual("temp", variable.Name);
            Assert.AreEqual("23", variable.Value);
        }