File: test_lp.py

package info (click to toggle)
software-properties 0.92.25debian1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 3,964 kB
  • ctags: 412
  • sloc: python: 4,664; makefile: 21; sh: 18
file content (104 lines) | stat: -rwxr-xr-x 3,945 bytes parent folder | download
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
#!/usr/bin/python

import os
import unittest
import sys
sys.path.insert(0, "..")

import pycurl

from mock import patch

import softwareproperties.ppa
from  softwareproperties.ppa import (
    AddPPASigningKeyThread,
    PPAException,
    verify_keyid_is_v4,
    )


MOCK_PPA_INFO={
    "displayname": "PPA for Michael Vogt",
    "web_link": "https://launchpad.net/~mvo/+archive/ppa", 
    "signing_key_fingerprint": "019A25FED88F961763935D7F129196470EB12F05",
    "name": "ppa",
    }


class LaunchpadPPATestCase(unittest.TestCase):

    @unittest.skipUnless(
        "TEST_ONLINE" in os.environ,
        "skipping online tests unless TEST_ONLINE environment variable is set")
    def test_ppa_info_from_lp(self):
        # use correct data
        info = softwareproperties.ppa.get_ppa_info_from_lp("mvo", "ppa")
        self.assertNotEqual(info, {})
        self.assertEqual(info["name"], "ppa")
        # use empty CERT file
        softwareproperties.ppa.LAUNCHPAD_PPA_CERT = "/dev/null"
        with self.assertRaises(PPAException) as cm:
            softwareproperties.ppa.get_ppa_info_from_lp("mvo", "ppa")
        self.assertEqual(
            cm.exception.original_error.args[0], pycurl.E_SSL_CACERT)


class AddPPASigningKeyTestCase(unittest.TestCase):

    def setUp(self):
        self.t = AddPPASigningKeyThread("/mvo/ppa/ubuntu")

    @patch("softwareproperties.ppa.get_ppa_info_from_lp")
    @patch("softwareproperties.ppa.subprocess")
    def test_fingerprint_len_check(self, mock_subprocess, mock_get_ppa_info):
        """Test that short keyids (<160bit) are rejected""" 
        mock_ppa_info = MOCK_PPA_INFO.copy()
        mock_ppa_info["signing_key_fingerprint"] = "0EB12F05"
        mock_get_ppa_info.return_value = mock_ppa_info
        # do it
        res = self.t.add_ppa_signing_key("/mvo/ppa/ubuntu")
        self.assertFalse(res)
        self.assertFalse(mock_subprocess.Popen.called)
        self.assertFalse(mock_subprocess.call.called)

    @patch("softwareproperties.ppa.get_ppa_info_from_lp")
    @patch("softwareproperties.ppa.subprocess")
    def test_add_ppa_signing_key_wrong_fingerprint(self, mock_subprocess, mock_get_ppa_info):
        mock_get_ppa_info.return_value = MOCK_PPA_INFO
        mock_subprocess.call.return_value = 0
        with patch.object(self.t, "_get_fingerprints") as mock:
            # setup wrong fingerprint
            mock.return_value = ["48B913EC7093C0C675DADCC04BEF262422DF4087"]
            res = self.t.add_ppa_signing_key("/mvo/ppa/ubuntu")
            self.assertFalse(res)

    @patch("softwareproperties.ppa.get_ppa_info_from_lp")
    @patch("softwareproperties.ppa.subprocess")
    def test_add_ppa_signing_key_multiple_fingerprints(self, mock_subprocess, mock_get_ppa_info):
        mock_get_ppa_info.return_value = MOCK_PPA_INFO
        mock_subprocess.call.return_value = 0
        with patch.object(self.t, "_get_fingerprints") as mock:
            # setup multiple fingerprints
            mock.return_value = ["019A25FED88F961763935D7F129196470EB12F05",
                                 "48B913EC7093C0C675DADCC04BEF262422DF4087"]
            res = self.t.add_ppa_signing_key("/mvo/ppa/ubuntu")
            self.assertFalse(res)

    @patch("softwareproperties.ppa.get_ppa_info_from_lp")
    @patch("softwareproperties.ppa.subprocess")
    def test_add_ppa_signing_key_ok(self, mock_subprocess, mock_get_ppa_info):
        mock_get_ppa_info.return_value = MOCK_PPA_INFO
        mock_subprocess.call.return_value = 0
        # setup correct signing key
        with patch.object(self.t, "_get_fingerprints") as mock:
            mock.return_value = ["019A25FED88F961763935D7F129196470EB12F05"]
            res = self.t.add_ppa_signing_key("/mvo/ppa/ubuntu")
            self.assertTrue(res)
    
    def test_verify_keyid_is_v4(self):
        keyid = "0EB12F05"
        self.assertFalse(verify_keyid_is_v4(keyid))


if __name__ == "__main__":
    unittest.main()