I need to test my application in conditions where even 2G Internet connectivity isn’t at its full coverage (i.e. 2 bars instead of 4, 2G).
I prefer conducting these tests over WiFi.
Is there a way (programmatically or otherwise) to tell the Android OS on the real device to slow down or throttle Internet connection 56 Kbit/s?
Is this possible?
In one of your comments you mentioned that you have a DD-WRT router, which is really a tiny Linux box. So you may be able to get a way with the tc command:
tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 10mbit tc class add dev $DEV parent 1: classid 1:1 cbq rate 512kbit allot 1500 prio 5 bounded isolated tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip dst 126.96.36.199 flowid 1:1
It kind of depends on what you have on the upstream side. If you’re transmitting some kind of test load, write a driver at the upstream end that does, in fact, slow itself down — although sleep() is a bad choice. What you’ll be writing is essentially a fairly hard real-time program if you hope to get anything resembling a real workload.
(When I say “a driver” btw , I don’t mean necessarily a device driver, just some kind of driver program.)
But are you really trying to simulate a slow connection, or a degraded and noisy connection that has a low effective data rate?