xref: /expo/apps/test-suite/tests/Network.js (revision 191a2fb0)
1import * as Network from 'expo-network';
2import { Platform } from 'react-native';
3import { isDeviceFarm } from '../utils/Environment';
4
5export const name = 'Network';
6let Ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
7let macAddressRegex = /^([0-9a-fA-F]{2}[:.-]){5}[0-9a-fA-F]{2}$/;
8
9export async function test(t) {
10  if (Platform.OS === 'android') {
11    t.describe(`Network.isAirplaneModeEnabledAsync()`, async () => {
12      t.it(`returns a boolean`, async () => {
13        let isAirplaneModeOn = await Network.isAirplaneModeEnabledAsync();
14        t.expect(isAirplaneModeOn).toBeDefined();
15        t.expect(typeof isAirplaneModeOn).toBe('boolean');
16      });
17      t.it(`throws error Network.getIpAddressAsync() if Airplane mode is on`, async () => {
18        let isAirplaneModeOn = await Network.isAirplaneModeEnabledAsync();
19        if (isAirplaneModeOn) {
20          let ipAddress;
21          let error;
22          try {
23            ipAddress = await Network.getIpAddressAsync();
24          } catch (e) {
25            error = e;
26          }
27          t.expect(error).toBeDefined();
28          t.expect(typeof ipAddress).toEqual('undefined');
29        }
30      });
31      t.it(`throws error Network.getNetworkStateAsync() if Airplane mode is on`, async () => {
32        let isAirplaneModeOn = await Network.isAirplaneModeEnabledAsync();
33        if (isAirplaneModeOn) {
34          let networkState;
35          let error;
36          try {
37            networkState = await Network.getNetworkStateAsync();
38          } catch (e) {
39            error = e;
40          }
41          t.expect(error).toBeDefined();
42          t.expect(typeof ipAddress).toEqual('undefined');
43        }
44      });
45    });
46  }
47  t.describe(`Network.getIpAddressAsync()`, () => {
48    t.it(`gets valid IPV4 address when device's online`, async () => {
49      let ipAddress;
50      let error;
51      try {
52        ipAddress = await Network.getIpAddressAsync();
53      } catch (e) {
54        error = e;
55      }
56      t.expect(typeof ipAddress).toEqual('string');
57      t.expect(typeof error).toEqual('undefined');
58      t.expect(Ipv4Regex.test(ipAddress)).toBeTruthy();
59    });
60  });
61  t.describe(`Network.getMacAddressAsync()`, () => {
62    if (!isDeviceFarm()) {
63      t.it(`returns valid Mac address when pass in no network interface name`, async () => {
64        let macAddress;
65        let error;
66        try {
67          macAddress = await Network.getMacAddressAsync();
68        } catch (e) {
69          error = e;
70        }
71        t.expect(typeof error).toEqual('undefined');
72        t.expect(macAddress).toBeDefined();
73        t.expect(macAddressRegex.test(macAddress)).toBeTruthy();
74      });
75    }
76    if (Platform.OS === 'android') {
77      t.it(`throws error when pass in invalid network interface name`, async () => {
78        let macAddress;
79        let error;
80        try {
81          macAddress = await Network.getMacAddressAsync('helloworld');
82        } catch (e) {
83          error = e;
84        }
85        t.expect(error).toBeDefined();
86        t.expect(typeof macAddress).toEqual('undefined');
87      });
88      if (!isDeviceFarm()) {
89        t.it(`returns valid Mac address when pass in null as network interface name`, async () => {
90          let macAddress;
91          let error;
92          try {
93            macAddress = await Network.getMacAddressAsync(null);
94          } catch (e) {
95            error = e;
96          }
97          t.expect(typeof error).toEqual('undefined');
98          t.expect(macAddress).toBeDefined();
99          t.expect(macAddressRegex.test(macAddress)).toBeTruthy();
100        });
101      }
102    }
103  });
104  t.describe(`Network.getNetworkStateAsync()`, () => {
105    t.it(`gets valid NetworkState types and valid NetworkStateType enums`, async () => {
106      function validateBoolean(result) {
107        t.expect(result).toBeDefined();
108        t.expect(typeof result).toBe('boolean');
109      }
110      let error;
111      try {
112        const { type, isConnected, isInternetReachable } = await Network.getNetworkStateAsync();
113        validateBoolean(isConnected);
114        validateBoolean(isInternetReachable);
115        t.expect(Object.values(Network.NetworkStateType).includes(type)).toBeTruthy();
116        t.expect(typeof error).toEqual('undefined');
117      } catch (e) {
118        error = e;
119      }
120    });
121  });
122}
123