summaryrefslogtreecommitdiff
path: root/app/src/androidTest/java/se/leap/bitmaskclient/test/VpnTestController.java
blob: 69fa01eb6bcfd73192cae9f122fa81ef5211c6e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package se.leap.bitmaskclient.test;

import android.graphics.*;
import android.graphics.drawable.*;
import android.view.*;
import android.widget.*;

import com.robotium.solo.*;

import de.blinkt.openvpn.activities.*;
import mbanje.kurt.fabbutton.*;
import se.leap.bitmaskclient.R;

public class VpnTestController {

    private final Solo solo;

    public VpnTestController(Solo solo) {
        this.solo = solo;
    }

    protected void turnVpnOndAndOff(String provider) {
        clickVpnButton();
        turningEipOn();
        clickVpnButton();
        turningEipOff();
    }

    protected void clickVpnButton() {
        solo.clickOnView(getVpnButton());
    }

    protected Button getVpnButton() {
        return (Button) solo.getView(R.id.vpn_main_button);
    }

    protected FabButton getVpnWholeIcon() {
        return (FabButton) solo.getView(R.id.vpn_Status_Image);
    }

    protected void turningEipOn() {
        assertInProgress();
        int max_seconds_until_connected = 30;

        Condition condition = new Condition() {
            @Override
            public boolean isSatisfied() {
                return iconConnected();
            }
        };
        solo.waitForCondition(condition, max_seconds_until_connected * 1000);
        sleepSeconds(2);
    }

    private void assertInProgress() {
        ProgressRingView a = (ProgressRingView) getVpnWholeIcon().findViewById(R.id.fabbutton_ring);
        BaseTestDashboard.isShownWithinConfinesOfVisibleScreen(a);
    }

    private boolean iconConnected() {
        return getVpnInsideIcon().equals(getDrawable(R.drawable.ic_stat_vpn));
    }

    private boolean iconDisconnected() {
        return getVpnInsideIcon().equals(getDrawable(R.drawable.ic_stat_vpn_offline));
    }

    private Drawable getDrawable(int resId) {
        return solo.getCurrentActivity().getResources().getDrawable(resId);
    }

    private Bitmap getVpnInsideIcon() {
        CircleImageView a = (CircleImageView) getVpnWholeIcon().findViewById(R.id.fabbutton_circle);
        a.setDrawingCacheEnabled(true);
        return a.getDrawingCache();
    }

    protected void turningEipOff() {
        okToBrowserWarning();
        sayOkToDisconnect();

        int max_seconds_until_connected = 1;

        Condition condition = new Condition() {
            @Override
            public boolean isSatisfied() {
                return iconDisconnected();
            }
        };
        solo.waitForCondition(condition, max_seconds_until_connected * 1000);
        sleepSeconds(2);
    }

    private void okToBrowserWarning() {
        solo.waitForDialogToOpen();
        clickYes();
    }

    private void clickYes() {
        String yes = solo.getString(android.R.string.yes);
        solo.clickOnText(yes);
    }

    private void sayOkToDisconnect() throws IllegalStateException {
        boolean disconnect_vpn_appeared = solo.waitForActivity(DisconnectVPN.class);
        if(disconnect_vpn_appeared)
            clickYes();
        else throw new IllegalStateException();
    }

    void sleepSeconds(int seconds) {
        solo.sleep(seconds * 1000);
    }
}