/*
* Copyright 2014 Google Inc. All rights reserved.
*
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
* ANY KIND, either express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.google.maps;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import com.google.maps.model.CellTower;
import com.google.maps.model.GeolocationPayload;
import com.google.maps.model.GeolocationResult;
import com.google.maps.model.WifiAccessPoint;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import java.util.concurrent.TimeUnit;
@Category(LargeTests.class)
public class GeolocationApiTest extends KeyOnlyAuthenticatedTest {
private GeoApiContext context;
public GeolocationApiTest(GeoApiContext context) {
this.context = context
.setQueryRateLimit(3)
.setConnectTimeout(1, TimeUnit.SECONDS)
.setReadTimeout(1, TimeUnit.SECONDS)
.setWriteTimeout(1, TimeUnit.SECONDS);
}
@Test
public void testDocSampleGeolocation() throws Exception {
// https://developers.google.com/maps/documentation/geolocation/intro#sample-requests
GeolocationResult result = GeolocationApi.newRequest(context)
.ConsiderIp(false)
.HomeMobileCountryCode(310)
.HomeMobileNetworkCode(260)
.RadioType("gsm")
.Carrier("T-Mobile")
.AddCellTower(new CellTower.CellTowerBuilder()
.CellId(39627456)
.LocationAreaCode(40495)
.MobileCountryCode(310)
.MobileNetworkCode(260)
.Age(0)
.SignalStrength(-95)
.createCellTower())
.AddWifiAccessPoint(new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("01:23:45:67:89:AB")
.SignalStrength(-65)
.SignalToNoiseRatio(8)
.Channel(8)
.Age(0)
.createWifiAccessPoint())
.AddWifiAccessPoint(new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("01:23:45:67:89:AC")
.SignalStrength(4)
.SignalToNoiseRatio(4)
.Age(0)
.createWifiAccessPoint())
.CreatePayload()
.await();
assertNotNull(result);
assertNotNull(result.location);
assertEquals("accuracy", 1145.0, result.accuracy, 0.00001);
assertEquals("lat", 37.4248297, result.location.lat, 0.00001);
assertEquals("lng", -122.07346549999998, result.location.lng, 0.00001);
}
@Test
public void testMinimumWifiGeolocation() throws Exception {
GeolocationResult result = GeolocationApi.newRequest(context)
.ConsiderIp(false)
.AddWifiAccessPoint(new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("94:b4:0f:ff:6b:11")
.createWifiAccessPoint())
.AddWifiAccessPoint(new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("94:b4:0f:ff:6b:10")
.createWifiAccessPoint())
.CreatePayload()
.await();
assertNotNull(result);
assertNotNull(result.location);
assertEquals("accuracy", 150.0, result.accuracy, 0.001);
assertEquals("lat", 37.3989885, result.location.lat, 0.001);
assertEquals("lng", -122.0585196, result.location.lng, 0.001);
}
// Commenting out flaky test - brettmorgan@google.com
//@Test
public void testBasicGeolocation() throws Exception {
GeolocationResult result = GeolocationApi.newRequest(context)
.ConsiderIp(false)
.AddWifiAccessPoint(new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("92:68:c3:f8:76:47")
.SignalStrength(-42)
.SignalToNoiseRatio(68)
.createWifiAccessPoint())
.AddWifiAccessPoint(new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("94:b4:0f:ff:6b:11")
.SignalStrength(-55)
.SignalToNoiseRatio(55)
.createWifiAccessPoint())
.CreatePayload()
.await();
assertNotNull(result);
assertNotNull(result.location);
assertEquals("accuracy", 150.0, result.accuracy, 0.00001);
assertEquals("lat", 37.3989885, result.location.lat, 0.00001);
assertEquals("lng", -122.0585196, result.location.lng, 0.00001);
}
@Test
public void testAlternateWifiSetterGeolocation() throws Exception {
WifiAccessPoint[] wifiAccessPoints = new WifiAccessPoint[2];
wifiAccessPoints[0] = new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("94:b4:0f:ff:6b:11")
.createWifiAccessPoint();
wifiAccessPoints[1] = new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("94:b4:0f:ff:6b:10")
.createWifiAccessPoint();
GeolocationResult result = GeolocationApi.newRequest(context)
.ConsiderIp(false)
.WifiAccessPoints(wifiAccessPoints)
.CreatePayload()
.await();
assertNotNull(result);
assertNotNull(result.location);
assertEquals("accuracy", 150.0, result.accuracy, 0.001);
assertEquals("lat", 37.3989885, result.location.lat, 0.001);
assertEquals("lng", -122.0585196, result.location.lng, 0.001);
}
// Commenting out flaky test to make Travis happy - brettmorgan@google.com
//@Test
public void testMaximumWifiGeolocation() throws Exception {
GeolocationResult result = GeolocationApi.newRequest(context)
.ConsiderIp(false)
.HomeMobileCountryCode(310)
.HomeMobileNetworkCode(410)
.RadioType("gsm")
.Carrier("Vodafone")
.AddWifiAccessPoint(new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("94:b4:0f:ff:88:31")
.SignalStrength(-61)
.SignalToNoiseRatio(49)
.Channel(40)
.Age(0)
.createWifiAccessPoint())
.AddWifiAccessPoint(new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("94:b4:0f:ff:88:30")
.SignalStrength(-64)
.SignalToNoiseRatio(46)
.Channel(40)
.Age(0)
.createWifiAccessPoint())
.CreatePayload()
.await();
assertNotNull(result);
assertNotNull(result.location);
assertEquals("accuracy", 25.0, result.accuracy, 0.00001);
assertEquals("lat", 37.3990122, result.location.lat, 0.00001);
assertEquals("lng", -122.0583656, result.location.lng, 0.00001);
}
@Test
public void testMinimumCellTowerGeolocation() throws Exception {
GeolocationResult result = GeolocationApi.newRequest(context)
.ConsiderIp(false)
.AddCellTower(new CellTower.CellTowerBuilder()
.CellId(39627456)
.LocationAreaCode(40495)
.MobileCountryCode(310)
.MobileNetworkCode(260)
.createCellTower())
.CreatePayload()
.await();
assertNotNull(result);
assertNotNull(result.location);
assertEquals("accuracy", 658.0, result.accuracy, 0.00001);
assertEquals("lat", 37.42659, result.location.lat, 0.00001);
assertEquals("lng", -122.07266190000001, result.location.lng, 0.00001);
}
@Test
public void testAlternatePayloadBuilderGeolocation() throws Exception {
// using the alternate style of payload building
GeolocationPayload payload = new GeolocationPayload.GeolocationPayloadBuilder()
.ConsiderIp(false)
.AddCellTower(new CellTower.CellTowerBuilder()
.CellId(39627456)
.LocationAreaCode(40495)
.MobileCountryCode(310)
.MobileNetworkCode(260)
.createCellTower())
.createGeolocationPayload();
GeolocationResult result = GeolocationApi.geolocate(context, payload).await();
assertNotNull(result);
assertNotNull(result.location);
assertEquals("accuracy", 658.0, result.accuracy, 0.00001);
assertEquals("lat", 37.42659, result.location.lat, 0.00001);
assertEquals("lng", -122.07266190000001, result.location.lng, 0.00001);
}
@Test
public void testMaximumCellTowerGeolocation() throws Exception {
GeolocationResult result = GeolocationApi.newRequest(context)
.ConsiderIp(false)
.HomeMobileCountryCode(310)
.HomeMobileNetworkCode(260)
.RadioType("gsm")
.Carrier("Vodafone")
.AddCellTower(new CellTower.CellTowerBuilder()
.CellId(39627456)
.LocationAreaCode(40495)
.MobileCountryCode(310)
.MobileNetworkCode(260)
.Age(0)
.SignalStrength(-103)
.TimingAdvance(15)
.createCellTower())
.CreatePayload()
.await();
assertNotNull(result);
assertNotNull(result.location);
assertEquals("accuracy", 1145.0, result.accuracy, 0.00001);
assertEquals("lat", 37.4248297, result.location.lat, 0.00001);
assertEquals("lng", -122.07346549999998, result.location.lng, 0.00001);
}
@Test
public void testNoPayloadGeolocation0() throws Exception {
GeolocationPayload payload = new GeolocationPayload.GeolocationPayloadBuilder()
.createGeolocationPayload();
GeolocationResult result = GeolocationApi.geolocate(context, payload).await();
assertNotNull(result);
assertNotNull(result.location);
}
@Test
public void testNoPayloadGeolocation1() throws Exception {
GeolocationResult result = GeolocationApi.newRequest(context)
.CreatePayload()
.await();
assertNotNull(result);
assertNotNull(result.location);
}
@Test
public void testNotFoundGeolocation() throws Exception {
try {
GeolocationResult result = GeolocationApi.newRequest(context)
.ConsiderIp(false)
.CreatePayload()
.await();
} catch (Exception e) {
assertTrue(e.getMessage().equals("Not Found"));
}
}
@Test
public void testInvalidArgumentGeolocation() throws Exception {
try {
GeolocationResult result = GeolocationApi.newRequest(context)
.HomeMobileCountryCode(-310)
.CreatePayload()
.await();
} catch (Exception e) {
assertTrue(e.getMessage().equals("Invalid value for UnsignedInteger: -310"));
}
}
}