1 | """ |
---|
2 | Test infrastructure for integration-y tests that run actual nodes, like those |
---|
3 | in ``allmydata.test.test_system``. |
---|
4 | |
---|
5 | Ported to Python 3. |
---|
6 | """ |
---|
7 | |
---|
8 | from typing import Optional |
---|
9 | import os |
---|
10 | from functools import partial |
---|
11 | |
---|
12 | from twisted.internet import reactor |
---|
13 | from twisted.internet import defer |
---|
14 | from twisted.internet.defer import inlineCallbacks |
---|
15 | from twisted.internet.task import deferLater |
---|
16 | from twisted.application import service |
---|
17 | |
---|
18 | from foolscap.api import flushEventualQueue |
---|
19 | |
---|
20 | from allmydata import client |
---|
21 | from allmydata.introducer.server import create_introducer |
---|
22 | from allmydata.util import fileutil, log, pollmixin |
---|
23 | from allmydata.util.deferredutil import async_to_deferred |
---|
24 | from allmydata.storage import http_client |
---|
25 | from allmydata.storage_client import ( |
---|
26 | NativeStorageServer, |
---|
27 | HTTPNativeStorageServer, |
---|
28 | ) |
---|
29 | |
---|
30 | from twisted.python.filepath import ( |
---|
31 | FilePath, |
---|
32 | ) |
---|
33 | |
---|
34 | from .common import ( |
---|
35 | SameProcessStreamEndpointAssigner, |
---|
36 | ) |
---|
37 | |
---|
38 | from . import common_util as testutil |
---|
39 | from ..scripts.common import ( |
---|
40 | write_introducer, |
---|
41 | ) |
---|
42 | |
---|
43 | # our system test uses the same Tub certificates each time, to avoid the |
---|
44 | # overhead of key generation |
---|
45 | SYSTEM_TEST_CERTS = [ |
---|
46 | """-----BEGIN CERTIFICATE----- |
---|
47 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
48 | bmd5MB4XDTIwMDEwMjAxNDAzM1oXDTIxMDEwMTAxNDAzM1owFzEVMBMGA1UEAwwM |
---|
49 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1iNV |
---|
50 | z07PYwZwucl87QlL2TFZvDxD4flZ/p3BZE3DCT5Efn9w2NT4sHXL1e+R/qsDFuNG |
---|
51 | bw1y1TRM0DGK6Wr0XRT2mLQULNgB8y/HrhcSdONsYRyWdj+LimyECKjwh0iSkApv |
---|
52 | Yj/7IOuq6dOoh67YXPdf75OHLShm4+8q8fuwhBL+nuuO4NhZDJKupYHcnuCkcF88 |
---|
53 | LN77HKrrgbpyVmeghUkwJMLeJCewvYVlambgWRiuGGexFgAm6laS3rWetOcdm9eg |
---|
54 | FoA9PKNN6xvPatbj99MPoLpBbzsI64M0yT/wTSw1pj/Nom3rwfMa2OH8Kk7c8R/r |
---|
55 | U3xj4ZY1DTlGERvejQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAwyQjQ3ZgtJ3JW |
---|
56 | r3/EPdqSUBamTfXIpOh9rXmRjPpbe+MvenqIzl4q+GnkL5mdEb1e1hdKQZgFQ5Q5 |
---|
57 | tbcNIz6h5C07KaNtbqhZCx5c/RUEH87VeXuAuOqZHbZWJ18q0tnk+YgWER2TOkgE |
---|
58 | RI2AslcsJBt88UUOjHX6/7J3KjPFaAjW1QV3TTsHxk14aYDYJwPdz+ijchgbOPQ0 |
---|
59 | i+ilhzcB+qQnOC1s4xQSFo+zblTO7EgqM9KpupYfOVFh46P1Mak2W8EDvhz0livl |
---|
60 | OROXJ6nR/13lmQdfVX6T45d+ITBwtmW2nGAh3oI3JlArGKHaW+7qnuHR72q9FSES |
---|
61 | cEYA/wmk |
---|
62 | -----END CERTIFICATE----- |
---|
63 | -----BEGIN PRIVATE KEY----- |
---|
64 | MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDWI1XPTs9jBnC5 |
---|
65 | yXztCUvZMVm8PEPh+Vn+ncFkTcMJPkR+f3DY1PiwdcvV75H+qwMW40ZvDXLVNEzQ |
---|
66 | MYrpavRdFPaYtBQs2AHzL8euFxJ042xhHJZ2P4uKbIQIqPCHSJKQCm9iP/sg66rp |
---|
67 | 06iHrthc91/vk4ctKGbj7yrx+7CEEv6e647g2FkMkq6lgdye4KRwXzws3vscquuB |
---|
68 | unJWZ6CFSTAkwt4kJ7C9hWVqZuBZGK4YZ7EWACbqVpLetZ605x2b16AWgD08o03r |
---|
69 | G89q1uP30w+gukFvOwjrgzTJP/BNLDWmP82ibevB8xrY4fwqTtzxH+tTfGPhljUN |
---|
70 | OUYRG96NAgMBAAECggEAJ5xztBx0+nFnisZ9yG8uy6d4XPyc5gE1J4dRDdfgmyYc |
---|
71 | j3XNjx6ePi4cHZ/qVryVnrc+AS7wrgW1q9FuS81QFKPbFdZB4SW3/p85BbgY3uxu |
---|
72 | 0Ovz3T3V9y4polx12eCP0/tKLVd+gdF2VTik9Sxfs5rC8VNN7wmJNuK4A/k15sgy |
---|
73 | BIu/R8NlMNGQySNhtccp+dzB8uTyKx5zFZhVvnAK/3YX9BC2V4QBW9JxO4S8N0/9 |
---|
74 | 48e9Sw/fGCfQ/EFPKGCvTvfuRqJ+4t5k10FygXJ+s+y70ifYi+aSsjJBuranbLJp |
---|
75 | g5TwhuKnTWs8Nth3YRLbcJL4VBIOehjAWy8pDMMtlQKBgQD0O8cHb8cOTGW0BijC |
---|
76 | NDofhA2GooQUUR3WL324PXWZq0DXuBDQhJVBKWO3AYonivhhd/qWO8lea9MEmU41 |
---|
77 | nKZ7maS4B8AJLJC08P8GL1uCIE/ezEXEi9JwC1zJiyl595Ap4lSAozH0DwjNvmGL |
---|
78 | 5mIdYg0BliqFXbloNJkNlb7INwKBgQDgdGEIWXc5Y1ncWNs6iDIV/t2MlL8vLrP0 |
---|
79 | hpkl/QiMndOQyD6JBo0+ZqvOQTSS4NTSxBROjPxvFbEJ3eH8Pmn8gHOf46fzP1OJ |
---|
80 | wlYv0gYzkN4FE/tN6JnO2u9pN0euyyZLM1fnEcrMWColMN8JlWjtA7Gbxm8lkfa4 |
---|
81 | 3vicaJtlWwKBgQCQYL4ZgVR0+Wit8W4qz+EEPHYafvwBXqp6sXxqa7qXawtb+q3F |
---|
82 | 9nqdGLCfwMNA+QA37ksugI1byfXmpBH902r/aiZbvAkj4zpwHH9F0r0PwbY1iSA9 |
---|
83 | PkLahX0Gj8OnHFgWynsVyGOBWVnk9oSHxVt+7zWtGG5uhKdUGLPZugocJQKBgB61 |
---|
84 | 7bzduOFiRZ5PjhdxISE/UQL2Kz6Cbl7rt7Kp72yF/7eUnnHTMqoyFBnRdCcQmi4I |
---|
85 | ZBrnUXbFigamlFAWHhxNWwSqeoVeychUjcRXQT/291nMhRsA02KpNA66YJV6+E9b |
---|
86 | xBA6r/vLqGCUUkAWcFfVpIyC1xxV32MmJvAHpBN3AoGAPF3MUFiO0iKNZfst6Tm3 |
---|
87 | rzrldLawDo98DRZ7Yb2kWlWZYqUk/Nvryvo2cns75WGSMDYVbbRp+BY7kZmNYa9K |
---|
88 | iQzKDL54ZRu6V+getJdeAO8yXoCmnZKxt5OHvOSrQMfAmFKSwLwxBbZBfXEyuune |
---|
89 | yfusXLtCgajpreoVIa0xWdQ= |
---|
90 | -----END PRIVATE KEY----- |
---|
91 | """, # 0 |
---|
92 | """-----BEGIN CERTIFICATE----- |
---|
93 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
94 | bmd5MB4XDTIwMDEwMjAxNDAzM1oXDTIxMDEwMTAxNDAzM1owFzEVMBMGA1UEAwwM |
---|
95 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApDzW |
---|
96 | 4ZBeK9w4xpRaed6lXzeCO0Xmr3f0ynbueSdiZ89FWoAMgK+SiBIOViYV6hfm0Wah |
---|
97 | lemSNzFGx5LvDSg2uwSqEP23DeM9O/SQPgIAiLeeEsYZJcgg2jz92YfFEaahsGdI |
---|
98 | 6qSP4XI2/5dgKRpPOYDGyw6R5PQR6w22Xq1WD1jBvImk/k09I9jHRn40pYbaJzbg |
---|
99 | U2aIjvOruo2kqe4f6iDqE0piYimAZJUvemu1UoyV5NG590hGkDuWsMD77+d2FxCj |
---|
100 | 9Nzb+iuuG3ksnanHPyXi1hQmzp5OmzVWaevCHinNjWgsuSuLGO9H2SLf3wwp2UCs |
---|
101 | EpKtzoKrnZdEg/anNwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQChxtr67o1aZZMJ |
---|
102 | A6gESPtFjZLw6wG0j50JsrWKLvoXVts1ToJ9u2nx01aFKjBwb4Yg+vdJfDgIIAEm |
---|
103 | jS56h6H2DfJlkTWHmi8Vx1wuusWnrNwYMI53tdlRIpD2+Ne7yeoLQZcVN2wuPmxD |
---|
104 | Mbksg4AI4csmbkU/NPX5DtMy4EzM/pFvIcxNIVRUMVTFzn5zxhKfhyPqrMI4fxw1 |
---|
105 | UhUbEKO+QgIqTNp/dZ0lTbFs5HJQn6yirWyyvQKBPmaaK+pKd0RST/T38OU2oJ/J |
---|
106 | LojRs7ugCJ+bxJqegmQrdcVqZZGbpYeK4O/5eIn8KOlgh0nUza1MyjJJemgBBWf7 |
---|
107 | HoXB8Fge |
---|
108 | -----END CERTIFICATE----- |
---|
109 | -----BEGIN PRIVATE KEY----- |
---|
110 | MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCkPNbhkF4r3DjG |
---|
111 | lFp53qVfN4I7Reavd/TKdu55J2Jnz0VagAyAr5KIEg5WJhXqF+bRZqGV6ZI3MUbH |
---|
112 | ku8NKDa7BKoQ/bcN4z079JA+AgCIt54SxhklyCDaPP3Zh8URpqGwZ0jqpI/hcjb/ |
---|
113 | l2ApGk85gMbLDpHk9BHrDbZerVYPWMG8iaT+TT0j2MdGfjSlhtonNuBTZoiO86u6 |
---|
114 | jaSp7h/qIOoTSmJiKYBklS96a7VSjJXk0bn3SEaQO5awwPvv53YXEKP03Nv6K64b |
---|
115 | eSydqcc/JeLWFCbOnk6bNVZp68IeKc2NaCy5K4sY70fZIt/fDCnZQKwSkq3Ogqud |
---|
116 | l0SD9qc3AgMBAAECggEBAIu55uaIOFYASZ1IYaEFNpRHWVisI5Js76nAfSo9w46l |
---|
117 | 3E8eWYSx2mxBUEkipco/A3RraFVuHaMvHRR1gUMkT0vUsAs8jxwVk+cKLh1S/rlR |
---|
118 | 3f4C4yotlSWWdjE3PQXDShQWCwb1ciNPVFMmqfzOEVDOqlHe12h97TCYverWdT0f |
---|
119 | 3LZICLQsZd1WPKnPNXrsRRDCBuRLapdg+M0oJ+y6IiCdm+qM7Qvaoef6hlvm5ECz |
---|
120 | LCM92db5BKTuPOQXMx2J8mjaBgU3aHxRV08IFgs7mI6q0t0FM7LlytIAJq1Hg5QU |
---|
121 | 36zDKo8tblkPijWZWlqlZCnlarrd3Ar/BiLEiuOGDMECgYEA1GOp0KHy0mbJeN13 |
---|
122 | +TDsgP7zhmqFcuJREu2xziNJPK2S06NfGYE8vuVqBGzBroLTQ3dK7rOJs9C6IjCE |
---|
123 | mH7ZeHzfcKohpZnl443vHMSpgdh/bXTEO1aQZNbJ2hLYs8ie/VqqHR0u6YtpUqZL |
---|
124 | LgaUA0U8GnlsO55B8kyCelckmDkCgYEAxfYQMPEEzg1tg2neqEfyoeY0qQTEJTeh |
---|
125 | CPMztowSJpIyF1rQH6TaG0ZchkiAkw3W58RVDfvK72TuVlC5Kz00C2/uPnrqm0dX |
---|
126 | iMPeML5rFlG3VGCrSTnAPI+az6P65q8zodqcTtA8xoxgPOlc/lINOxiTEMxLyeGF |
---|
127 | 8GyP+sCM2u8CgYEAvMBR05OJnEky9hJEpBZBqSZrQGL8dCwDh0HtCdi8JovPd/yx |
---|
128 | 8JW1aaWywXnx6uhjXoru8hJm54IxWV8rB+d716OKY7MfMfACqWejQDratgW0wY7L |
---|
129 | MjztGGD2hLLJGYXLHjfsBPHBllaKZKRbHe1Er19hWdndQWKVEwPB1X4KjKkCgYEA |
---|
130 | nWHmN3K2djbYtRyLR1CEBtDlVuaSJmCWp23q1BuCJqYeKtEpG69NM1f6IUws5Dyh |
---|
131 | eXtuf4KKMU8V6QueW1D6OomPaJ8CO9c5MWM/F5ObwY/P58Y/ByVhvwQQeToONC5g |
---|
132 | JzKNCF+nodZigKqrIwoKuMvtx/IT4vloKd+1jA5fLYMCgYBoT3HLCyATVdDSt1TZ |
---|
133 | SbEDoLSYt23KRjQV93+INP949dYCagtgh/kTzxBopw5FljISLfdYizIRo2AzhhfP |
---|
134 | WWpILlnt19kD+sNirJVqxJacfEZsu5baWTedI/yrCuVsAs/s3/EEY6q0Qywknxtp |
---|
135 | Fwh1/8y5t14ib5fxOVhi8X1nEA== |
---|
136 | -----END PRIVATE KEY----- |
---|
137 | """, # 1 |
---|
138 | """-----BEGIN CERTIFICATE----- |
---|
139 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
140 | bmd5MB4XDTIwMDEwMjAxNDAzM1oXDTIxMDEwMTAxNDAzM1owFzEVMBMGA1UEAwwM |
---|
141 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwMTn |
---|
142 | hXnpKHGAir3WYbOxefVrMA07OZNAsNa29nBwLA+NVIJNUFgquibMj7QYo8+M45oY |
---|
143 | 6LKr4yRcBryZVvyxfdr92xp8+kLeVApk2WLjkdBTRagHh9qdrY0hQmagCBN6/hLG |
---|
144 | Xug8VksQUdhX3vu6ZyMvTLfKRkDOMRVkRGRGg/dOcvom7zpqMCGYenMG2FStr6UV |
---|
145 | 3s3dlCSZZTdTX5Uoq6yfUUJE3nITGKjpnpJKqIs3PWCIxdj7INIcjJKvIdUcavIV |
---|
146 | 2hEhh60A8ltmtdpQAXVBE+U7aZgS1fGAWS2A0a3UwuP2pkQp6OyKCUVHpZatbl9F |
---|
147 | ahDN2QBzegv/rdJ1zwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAl4OQZ+FB9ZSUv |
---|
148 | FL/KwLNt+ONU8Sve/xiX+8vKAvgKm2FrjyK+AZPwibnu+FSt2G4ndZBx4Wvpe5V+ |
---|
149 | gCsbzSXlh9cDn2SRXyprt2l/8Fj4eUMaThmLKOK200/N/s2SpmBtnuflBrhNaJpw |
---|
150 | DEi2KEPuXsgvkuVzXN06j75cUHwn5LeWDAh0RalkVuGbEWBoFx9Hq8WECdlCy0YS |
---|
151 | y09+yO01qz70y88C2rPThKw8kP4bX8aFZbvsnRHsLu/8nEQNlrELcfBarPVHjJ/9 |
---|
152 | imxOdymJkV152V58voiXP/PwXhynctQbF7e+0UZ+XEGdbAbZA0BMl7z+b09Z+jF2 |
---|
153 | afm4mVox |
---|
154 | -----END CERTIFICATE----- |
---|
155 | -----BEGIN PRIVATE KEY----- |
---|
156 | MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDAxOeFeekocYCK |
---|
157 | vdZhs7F59WswDTs5k0Cw1rb2cHAsD41Ugk1QWCq6JsyPtBijz4zjmhjosqvjJFwG |
---|
158 | vJlW/LF92v3bGnz6Qt5UCmTZYuOR0FNFqAeH2p2tjSFCZqAIE3r+EsZe6DxWSxBR |
---|
159 | 2Ffe+7pnIy9Mt8pGQM4xFWREZEaD905y+ibvOmowIZh6cwbYVK2vpRXezd2UJJll |
---|
160 | N1NflSirrJ9RQkTechMYqOmekkqoizc9YIjF2Psg0hyMkq8h1Rxq8hXaESGHrQDy |
---|
161 | W2a12lABdUET5TtpmBLV8YBZLYDRrdTC4/amRCno7IoJRUellq1uX0VqEM3ZAHN6 |
---|
162 | C/+t0nXPAgMBAAECggEAF+2ZK4lZdsq4AQDVhqUuh4v+NSW/T0NHCWxto6OLWPzJ |
---|
163 | N09BV5LKIvdD9yaM1HCj9XCgXOooyfYuciuhARo20f+H+VWNY+c+/8GWiSFsTCJG |
---|
164 | 4+Oao7NwVSWqljp07Ou2Hamo9AjxzGhe6znmlmg62CiW63f45MWQkqksHA0yb5jg |
---|
165 | /onJ2//I+OI+aTKNfjt1G6h2x7oxeGTU1jJ0Hb2xSh+Mpqx9NDfb/KZyOndhSG5N |
---|
166 | xRVosQ6uV+9mqHxTTwTZurTG31uhZzarkMuqxhcHS94ub7berEc/OlqvbyMKNZ3A |
---|
167 | lzuvq0NBZhEUhAVgORAIS17r/q2BvyG4u5LFbG2p0QKBgQDeyyOl+A7xc4lPE2OL |
---|
168 | Z3KHJPP4RuUnHnWFC+bNdr5Ag8K7jcjZIcasyUom9rOR0Fpuw9wmXpp3+6fyp9bJ |
---|
169 | y6Bi5VioR0ZFP5X+nXxIN3yvgypu6AZvkhHrEFer+heGHxPlbwNKCKMbPzDZPBTZ |
---|
170 | vlC7g7xUUcpNmGhrOKr3Qq5FlwKBgQDdgCmRvsHUyzicn8TI3IJBAOcaQG0Yr/R2 |
---|
171 | FzBqNfHHx7fUZlJfKJsnu9R9VRZmBi4B7MA2xcvz4QrdZWEtY8uoYp8TAGILfW1u |
---|
172 | CP4ZHrzfDo/67Uzk2uTMTd0+JOqSm/HiVNguRPvC8EWBoFls+h129GKThMvKR1hP |
---|
173 | 1oarfAGIiQKBgQCIMAq5gHm59JMhqEt4QqMKo3cS9FtNX1wdGRpbzFMd4q0dstzs |
---|
174 | ha4Jnv3Z9YHtBzzQap9fQQMRht6yARDVx8hhy6o3K2J0IBtTSfdXubtZGkfNBb4x |
---|
175 | Y0vaseG1uam5jbO+0u5iygbSN/1nPUfNln2JMkzkCh8s8ZYavMgdX0BiPwKBgChR |
---|
176 | QL/Hog5yoy5XIoGRKaBdYrNzkKgStwObuvNKOGUt5DckHNA3Wu6DkOzzRO1zKIKv |
---|
177 | LlmJ7VLJ3qln36VcaeCPevcBddczkGyb9GxsHOLZCroY4YsykLzjW2cJXy0qd3/E |
---|
178 | A8mAQvc7ttsebciZSi2x1BOX82QxUlDN8ptaKglJAoGBAMnLN1TQB0xtWYDPGcGV |
---|
179 | 2IvgX7OTRRlMVrTvIOvP5Julux9z1r0x0cesl/jaXupsBUlLLicPyBMSBJrXlr24 |
---|
180 | mrgkodk4TdqO1VtBCZBqak97DHVezstMrbpCGlUD5jBnsHVRLERvS09QlGhqMeNL |
---|
181 | jpNQbWH9VhutzbvpYquKrhvK |
---|
182 | -----END PRIVATE KEY----- |
---|
183 | """, # 2 |
---|
184 | """-----BEGIN CERTIFICATE----- |
---|
185 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
186 | bmd5MB4XDTIwMDEwMjAxNDAzM1oXDTIxMDEwMTAxNDAzM1owFzEVMBMGA1UEAwwM |
---|
187 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAypqi |
---|
188 | YTni3s60Uo8vgGcFvjWWkB5CD9Fx9pW/2KcxRJ/u137Y+BG8qWMA4lgII3ZIuvo4 |
---|
189 | 6rLDiXnAnDZqUtrvZ90O/gH6RyQqX3AI4EwPvCnRIIe0okRcxnxYBL/LfBY54xuv |
---|
190 | 46JRYZP4c9IImqQH9QVo2/egtEzcpbmT/mfhpf6NGQWC3Xps2BqDT2SV/DrX/wPA |
---|
191 | 8P1atE1AxNp8ENxK/cjFAteEyDZOsDSa757ZHKAdM7L8rZ1Fd2xAA1Dq7IyYpTNE |
---|
192 | IX72xytWxllcNvSUPLT+oicsSZBadc/p3moc3tR/rNdgrHKybedadru/f9Gwpa+v |
---|
193 | 0sllZlEcVPSYddAzWwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCmk60Nj5FPvemx |
---|
194 | DSSQjJPyJoIDpTxQ4luSzIq4hPwlUXw7dqrvHyCWgn2YVe9xZsGrT/+n376ecmgu |
---|
195 | sw4s4qVhR9bzKkTMewjC2wUooTA5v9HYsNWZy3Ah7hHPbDHlMADYobjB5/XolNUP |
---|
196 | bCM9xALEdM9DxpC4vjUZexlRKmjww9QKE22jIM+bqsK0zqDSq+zHpfHNGGcS3vva |
---|
197 | OvI6FPc1fAr3pZpVzevMSN2zufIJwjL4FT5/uzwOCaSCwgR1ztD5CSbQLTLlwIsX |
---|
198 | S7h2WF9078XumeRjKejdjEjyH4abKRq8+5LVLcjKEpg7OvktuRpPoGPCEToaAzuv |
---|
199 | h+RSQwwY |
---|
200 | -----END CERTIFICATE----- |
---|
201 | -----BEGIN PRIVATE KEY----- |
---|
202 | MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKmqJhOeLezrRS |
---|
203 | jy+AZwW+NZaQHkIP0XH2lb/YpzFEn+7Xftj4EbypYwDiWAgjdki6+jjqssOJecCc |
---|
204 | NmpS2u9n3Q7+AfpHJCpfcAjgTA+8KdEgh7SiRFzGfFgEv8t8FjnjG6/jolFhk/hz |
---|
205 | 0giapAf1BWjb96C0TNyluZP+Z+Gl/o0ZBYLdemzYGoNPZJX8Otf/A8Dw/Vq0TUDE |
---|
206 | 2nwQ3Er9yMUC14TINk6wNJrvntkcoB0zsvytnUV3bEADUOrsjJilM0QhfvbHK1bG |
---|
207 | WVw29JQ8tP6iJyxJkFp1z+neahze1H+s12CscrJt51p2u79/0bClr6/SyWVmURxU |
---|
208 | 9Jh10DNbAgMBAAECggEBALv7Q+Rf+C7wrQDZF6LUc9CrGfq4CGVy2IGJKgqT/jOF |
---|
209 | DO9nI1rv4hNr55sbQNneWtcZaYvht2mrzNlj57zepDjDM7DcFuLBHIuWgLXT/NmC |
---|
210 | FyZOo3vXYBlNr8EgT2XfnXAp9UWJCmc2CtUzsIYC4dsmXMeTd8kyc5tUl4r5ybTf |
---|
211 | 1g+RTck/IGgqdfzpuTsNl79FW2rP9z111Py6dbqgQzhuSAune9dnLFvZst8dyL8j |
---|
212 | FStETMxBM6jrCF1UcKXzG7trDHiCdzJ8WUhx6opN/8OasQGndwpXto6FZuBy/AVP |
---|
213 | 4kVQNpUXImYcLEpva0MqGRHg+YN+c84C71CMchnF4aECgYEA7J2go4CkCcZNKCy5 |
---|
214 | R5XVCqNFYRHjekR+UwH8cnCa7pMKKfP+lTCiBrO2q8zwWwknRMyuycS5g/xbSpg1 |
---|
215 | L6hi92CV1YQy1/JhlQedekjejNTTuLOPKf78AFNSfc7axDnes2v4Bvcdp9gsbUIO |
---|
216 | 10cXh0tOSLE7P9y+yC86KQkFAPECgYEA2zO0M2nvbPHv2jjtymY3pflYm0HzhM/T |
---|
217 | kPtue3GxOgbEPsHffBGssShBTE3yCOX3aAONXJucMrSAPL9iwUfgfGx6ADdkwBsA |
---|
218 | OjDlkxvTbP/9trE6/lsSPtGpWRdJNHqXN4Hx7gXJizRwG7Ym+oHvIIh53aIjdFoE |
---|
219 | HLQLpxObuQsCgYAuMQ99G83qQpYpc6GwAeYXL4yJyK453kky9z5LMQRt8rKXQhS/ |
---|
220 | F0FqQYc1vsplW0IZQkQVC5yT0Z4Yz+ICLcM0O9zEVAyA78ZxC42Io9UedSXn9tXK |
---|
221 | Awc7IQkHmmxGxm1dZYSEB5X4gFEb+zted3h2ZxMfScohS3zLI70c6a/aYQKBgQCU |
---|
222 | phRuxUkrTUpFZ1PCbN0R/ezbpLbaewFTEV7T8b6oxgvxLxI6FdZRcSYO89DNvf2w |
---|
223 | GLCVe6VKMWPBTlxPDEostndpjCcTq3vU+nHE+BrBkTvh14BVGzddSFsaYpMvNm8z |
---|
224 | ojiJHH2XnCDmefkm6lRacJKL/Tcj4SNmv6YjUEXLDwKBgF8WV9lzez3d/X5dphLy |
---|
225 | 2S7osRegH99iFanw0v5VK2HqDcYO9A7AD31D9nwX46QVYfgEwa6cHtVCZbpLeJpw |
---|
226 | qXnYXe/hUU3yn5ipdNJ0Dm/ZhJPDD8TeqhnRRhxbZmsXs8EzfwB2tcUbASvjb3qA |
---|
227 | vAaPlOSU1wXqhAsG9aVs8gtL |
---|
228 | -----END PRIVATE KEY----- |
---|
229 | """, # 3 |
---|
230 | """-----BEGIN CERTIFICATE----- |
---|
231 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
232 | bmd5MB4XDTIwMDEwMjAxNDAzNFoXDTIxMDEwMTAxNDAzNFowFzEVMBMGA1UEAwwM |
---|
233 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzUqQ |
---|
234 | M08E7F2ZE99bFHvpsR6LmgIJOOoGMXacTcEUhRF63E6+730FjxER2a30synv9GGS |
---|
235 | 3G9FstUmfhyimufkbTumri8Novw5CWZQLiE1rmMBI5nPcR2wAzy9z2odR6bfAwms |
---|
236 | yyc3IPYg1BEDBPZl0LCQrQRRU/rVOrbCf7IMq+ATazmBg01gXMzq2M953ieorkQX |
---|
237 | MsHVR/kyW0Q0yzhYF1OtIqbXxrdiZ+laTLWNqivj/FdegiWPCf8OcqpcpbgEjlDW |
---|
238 | gBcC/vre+0E+16nfUV8xHL5jseJMJqfT508OtHxAzp+2D7b54NvYNIvbOAP+F9gj |
---|
239 | aXy5mOvjXclK+hNmDwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAjZzTFKG7uoXxm |
---|
240 | BPHfQvsKHIB/Cx9zMKj6pLwJzCPHQBzKOMoUen09oq+fb77RM7WvdX0pvFgEXaJW |
---|
241 | q/ImooRMo+paf8GOZAuPwdafb2/OGdHZGZ2Cbo/ICGo1wGDCdMvbxTxrDNq1Yae+ |
---|
242 | m+2epN2pXAO1rlc7ktRkojM/qi3zXtbLjTs3IoPDXWhYPHdI1ThkneRmvxpzB1rW |
---|
243 | 2SBqj2snvyI+/3k3RHmldcdOrTlgWQ9hq05jWR8IVtRUFFVn9A+yQC3gnnLIUhwP |
---|
244 | HJWwTIPuYW25TuxFxYZXIbnAiluZL0UIjd3IAwxaafvB6uhI7v0K789DKj2vRUkY |
---|
245 | E8ptxZH4 |
---|
246 | -----END CERTIFICATE----- |
---|
247 | -----BEGIN PRIVATE KEY----- |
---|
248 | MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDNSpAzTwTsXZkT |
---|
249 | 31sUe+mxHouaAgk46gYxdpxNwRSFEXrcTr7vfQWPERHZrfSzKe/0YZLcb0Wy1SZ+ |
---|
250 | HKKa5+RtO6auLw2i/DkJZlAuITWuYwEjmc9xHbADPL3Pah1Hpt8DCazLJzcg9iDU |
---|
251 | EQME9mXQsJCtBFFT+tU6tsJ/sgyr4BNrOYGDTWBczOrYz3neJ6iuRBcywdVH+TJb |
---|
252 | RDTLOFgXU60iptfGt2Jn6VpMtY2qK+P8V16CJY8J/w5yqlyluASOUNaAFwL++t77 |
---|
253 | QT7Xqd9RXzEcvmOx4kwmp9PnTw60fEDOn7YPtvng29g0i9s4A/4X2CNpfLmY6+Nd |
---|
254 | yUr6E2YPAgMBAAECggEBAIiL6uQl0AmDrBj6vHMghGzp+0MBza6MgngOA6L4JTTp |
---|
255 | ToYQ3pEe4D6rxOq7+QHeiBtNd0ilvn9XpVXGqCVOzrIVNiWvaGubRjjJU9WLA1Ct |
---|
256 | y4kpekAr1fIhScMXOsh45ub3XXZ27AVBkM5dTlvTpB8uAd0C/TFVqtR10WLsQ99h |
---|
257 | Zm9Jczgs/6InYTssnAaqdeCLAf1LbmO4zwFsJfJOeSGGT6WBwlpHwMAgPhg8OLEu |
---|
258 | kVWG7BEJ0hxcODk/es/vce9SN7BSyIzNY+qHcGtsrx/o0eO2Av/Z7ltV4Sz6UN1K |
---|
259 | 0y0OTiDyT/l62U2OugSN3wQ4xPTwlrWl7ZUHJmvpEaECgYEA+w2JoB2i1OV2JTPl |
---|
260 | Y0TKSKcZYdwn7Nwh4fxMAJNJ8UbpPqrZEo37nxqlWNJrY/jKX3wHVk4ESSTaxXgF |
---|
261 | UY7yKT0gRuD9+vE0gCbUmJQJTwbceNJUu4XrJ6SBtf72WgmphL+MtyKdwV8XltVl |
---|
262 | Yp0hkswGmxl+5+Js6Crh7WznPl8CgYEA0VYtKs2YaSmT1zraY6Fv3AIQZq012vdA |
---|
263 | 7nVxmQ6jKDdc401OWARmiv0PrZaVNiEJ1YV8KxaPrKTfwhWqxNegmEBgA1FZ66NN |
---|
264 | SAm8P9OCbt8alEaVkcATveXTeOCvfpZUO3sqZdDOiYLiLCsokHblkcenK85n0yT6 |
---|
265 | CzhTbvzDllECgYEAu9mfVy2Vv5OK2b+BLsw0SDSwa2cegL8eo0fzXqLXOzCCKqAQ |
---|
266 | GTAgTSbU/idEr+NjGhtmKg/qaQioogVyhVpenLjeQ+rqYDDHxfRIM3rhlD5gDg/j |
---|
267 | 0wUbtegEHrgOgcSlEW16zzWZsS2EKxq16BoHGx6K+tcS/FOShg5ASzWnuiUCgYEA |
---|
268 | sMz+0tLX8aG7CqHbRyBW8FMR9RY/kRMY1Q1+Bw40wMeZfSSSkYYN8T9wWWT/2rqm |
---|
269 | qp7V0zJ34BFUJoDUPPH84fok3Uh9EKZYpAoM4z9JP0jREwBWXMYEJnOQWtwxfFGN |
---|
270 | DLumgF2Nwtg3G6TL2s+AbtJYH4hxagQl5woIdYmnyzECgYEAsLASpou16A3uXG5J |
---|
271 | +5ZgF2appS9Yfrqfh6TKywMsGG/JuiH3djdYhbJFIRGeHIIDb4XEXOHrg/SFflas |
---|
272 | If0IjFRh9WCvQxnoRha3/pKRSc3OEka1MR/ZREK/d/LQEPmsRJVzY6ABKqmPAMDD |
---|
273 | 5CnG6Hz/rP87BiEKd1+3PGp8GCw= |
---|
274 | -----END PRIVATE KEY----- |
---|
275 | """, # 4 |
---|
276 | """-----BEGIN CERTIFICATE----- |
---|
277 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
278 | bmd5MB4XDTIwMDEwMjAxNDAzNFoXDTIxMDEwMTAxNDAzNFowFzEVMBMGA1UEAwwM |
---|
279 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0sap |
---|
280 | 75YbbkEL85LFava3FrO1jpgVteQ4NGxxy1Nu9w2hPfMMeCPWjB8UfAwFk+LVPyvW |
---|
281 | LAXd1zWL5rGpQ2ytIVQlTraR5EnALA1sMcQYbFz1ISPTYB031bEN/Ch8JWYwCG5A |
---|
282 | X2H4D6BC7NgT6YyWDt8vxQnqAisPHQ/OK4ABD15CwkTyPimek2/ufYN2dapg1xhG |
---|
283 | IUD96gqetJv9bu0r869s688kADIComsYG+8KKfFN67S3rSHMIpZPuGTtoHGnVO89 |
---|
284 | XBm0vNe0UxQkJEGJzZPn0tdec0LTC4GNtTaz5JuCjx/VsJBqrnTnHHjx0wFz8pff |
---|
285 | afCimRwA+LCopxPE1QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBOkAnpBb3nY+dG |
---|
286 | mKCjiLqSsuEPqpNiBYR+ue/8aVDnOKLKqAyQuyRZttQ7bPpKHaw7pwyCZH8iHnt6 |
---|
287 | pMCLCftNSlV2Fa8msRmuf5AiGjUvR1M8VtHWNYE8pedWrJqUgBhF/405B99yd8CT |
---|
288 | kQJXKF18LObj7YKNsWRoMkVgqlQzWDMEqbfmy9MhuLx2EZPsTB1L0BHNGGDVBd9o |
---|
289 | cpPLUixcc12u+RPMKq8x3KgwsnUf5vX/pCnoGcCy4JahWdDgcZlf0hUKGT7PUem5 |
---|
290 | CWW8SMeqSWQX9XpE5Qlm1+W/QXdDXLbbHqDtvBeUy3iFQe3C9RSkp0qdutxkAlFk |
---|
291 | f5QHXfJ7 |
---|
292 | -----END CERTIFICATE----- |
---|
293 | -----BEGIN PRIVATE KEY----- |
---|
294 | MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDSxqnvlhtuQQvz |
---|
295 | ksVq9rcWs7WOmBW15Dg0bHHLU273DaE98wx4I9aMHxR8DAWT4tU/K9YsBd3XNYvm |
---|
296 | salDbK0hVCVOtpHkScAsDWwxxBhsXPUhI9NgHTfVsQ38KHwlZjAIbkBfYfgPoELs |
---|
297 | 2BPpjJYO3y/FCeoCKw8dD84rgAEPXkLCRPI+KZ6Tb+59g3Z1qmDXGEYhQP3qCp60 |
---|
298 | m/1u7Svzr2zrzyQAMgKiaxgb7wop8U3rtLetIcwilk+4ZO2gcadU7z1cGbS817RT |
---|
299 | FCQkQYnNk+fS115zQtMLgY21NrPkm4KPH9WwkGqudOccePHTAXPyl99p8KKZHAD4 |
---|
300 | sKinE8TVAgMBAAECggEALU5EotoqJUXYEtAenUJQ0pFoWjE4oXNf3Wzd/O1/MZ19 |
---|
301 | ZjqDGKPjbxUTKyLOZB5i5gQ/MhFEwQiifMD9eB+5CyvyJPw7Wc28f/uWoQ/cjBZj |
---|
302 | Hm979PHy2X0IW4Y8QTG462b/cUE2t+0j1ZMQnKf6bVHuC7V41mR5CC8oitMl5y5g |
---|
303 | 34yJmWXlIA0ep/WotLMqvil6DnSM/2V8Ch4SxjnzPpjbe4Kj+woucGNr4UKstZER |
---|
304 | 8iuHTsR64LjoGktRnnMwZxGZQI7EC428zsliInuWMdXe//w2chLdkirqpSrIQwSZ |
---|
305 | 3jNWStqBXGYaRg5Z1ilBvHtXxkzDzbAlzRBzqfEwwQKBgQDqYdMRrzHJaXWLdsyU |
---|
306 | 6jAuNX9tLh7PcicjP93SbPujS6mWcNb+D/au+VhWD+dZQDPRZttXck7wvKY1lw1V |
---|
307 | MK0TYI7ydf8h3DFx3Mi6ZD4JVSU1MH233C3fv/FHenDoOvMXXRjUZxaRmuzFJvzt |
---|
308 | 6QlKIfSvwT+1wrOACNfteXfZUQKBgQDmN3Uuk01qvsETPwtWBp5RNcYhS/zGEQ7o |
---|
309 | Q4K+teU453r1v8BGsQrCqulIZ3clMkDru2UroeKn1pzyVAS2AgajgXzfXh3VeZh1 |
---|
310 | vHTLP91BBYZTTWggalEN4aAkf9bxX/hA+9Bw/dzZcQW2aNV7WrYuCSvp3SDCMina |
---|
311 | anQq/PaSRQKBgHjw23HfnegZI89AENaydQQTFNqolrtiYvGcbgC7vakITMzVEwrr |
---|
312 | /9VP0pYuBKmYKGTgF0RrNnKgVX+HnxibUmOSSpCv9GNrdJQVYfpT6XL1XYqxp91s |
---|
313 | nrs7FuxUMNiUOoWOw1Yuj4W4lH4y3QaCXgnDtbfPFunaOrdRWOIv8HjRAoGAV3NT |
---|
314 | mSitbNIfR69YIAqNky3JIJbb42VRc1tJzCYOd+o+pCF96ZyRCNehnDZpZQDM9n8N |
---|
315 | 9GAfWEBHCCpwS69DVFL422TGEnSJPJglCZwt8OgnWXd7CW05cvt1OMgzHyekhxLg |
---|
316 | 4Dse7J5pXBxAlAYmVCB5xPGR4xLpISX1EOtcwr0CgYEA5rA2IUfjZYb4mvFHMKyM |
---|
317 | xWZuV9mnl3kg0ULttPeOl3ppwjgRbWpyNgOXl8nVMYzxwT/A+xCPA18P0EcgNAWc |
---|
318 | frJqQYg3NMf+f0K1wSaswUSLEVrQOj25OZJNpb21JEiNfEd5DinVVj4BtVc6KSpS |
---|
319 | kvjbn2WhEUatc3lPL3V0Fkw= |
---|
320 | -----END PRIVATE KEY----- |
---|
321 | """, # 5 |
---|
322 | """-----BEGIN CERTIFICATE----- |
---|
323 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
324 | bmd5MB4XDTIwMDEwMjAxNTExM1oXDTIxMDEwMTAxNTExM1owFzEVMBMGA1UEAwwM |
---|
325 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1c5y |
---|
326 | S9IZHF9MIuwdafzhMkgP37I3RVpHEbpnPwnLFqSWelS5m2eDkwWd5SkfGjrmQ5q0 |
---|
327 | PEpqLlh3zHGw9yQjnHS3CCS1PwQ1kmwvpIK3HM5y8GM7ry1zkam8ZR4iX6Y7VG9g |
---|
328 | 9mhiVVFoVhe1gHeiC/3Mp6XeNuEiD0buM+8qZx9B21I+iwzy4wva7Gw0fJeq9G1c |
---|
329 | lq2rhpD1LlIEodimWOi7lOEkNmUiO1SvpdrGdxUDpTgbdg6r5pCGjOXLd74tAQHP |
---|
330 | P/LuqRNJDXtwvHtLIVQnW6wjjy4oiWZ8DXOdc9SkepwQLIF5Wh8O7MzF5hrd6Cvw |
---|
331 | SOD3EEsJbyycAob6RwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBDNcbKVUyGOAVm |
---|
332 | k3iVuzkkkymlTAMm/gsIs6loLJrkSqNg160FdVKJoZFjQtqoqLgLrntdCJ377nZ9 |
---|
333 | 1i+yzbZsA4DA7nxj0IEdnd7rRYgGLspGqWeKSTROATeT4faLTXenecm0v2Rpxqc7 |
---|
334 | dSyeZJXOd2OoUu+Q64hzXCDXC6LNM+xZufxV9qv+8d+CipV6idSQZaUWSVuqFCwD |
---|
335 | PT0R4eWfkMMaM8QqtNot/hVCEaKT+9rG0mbpRe/b/qBy5SR0u+XgGEEIV+33L59T |
---|
336 | FXY+DpI1Dpt/bJFoUrfj6XohxdTdqYVCn1F8in98TsRcFHyH1xlkS3Y0RIiznc1C |
---|
337 | BwAoGZ4B |
---|
338 | -----END CERTIFICATE----- |
---|
339 | -----BEGIN PRIVATE KEY----- |
---|
340 | MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDVznJL0hkcX0wi |
---|
341 | 7B1p/OEySA/fsjdFWkcRumc/CcsWpJZ6VLmbZ4OTBZ3lKR8aOuZDmrQ8SmouWHfM |
---|
342 | cbD3JCOcdLcIJLU/BDWSbC+kgrccznLwYzuvLXORqbxlHiJfpjtUb2D2aGJVUWhW |
---|
343 | F7WAd6IL/cynpd424SIPRu4z7ypnH0HbUj6LDPLjC9rsbDR8l6r0bVyWrauGkPUu |
---|
344 | UgSh2KZY6LuU4SQ2ZSI7VK+l2sZ3FQOlOBt2DqvmkIaM5ct3vi0BAc8/8u6pE0kN |
---|
345 | e3C8e0shVCdbrCOPLiiJZnwNc51z1KR6nBAsgXlaHw7szMXmGt3oK/BI4PcQSwlv |
---|
346 | LJwChvpHAgMBAAECggEBAK0KLeUBgIM++Y7WDCRInzYjrn08bpE5tIU7mO4jDfQg |
---|
347 | dw1A3wtQZuOpyxW6B0siWlRis/aLv44M2cBkT3ZmEFBDAhOcKfh7fqQn3RNHG847 |
---|
348 | pDi8B4UKwxskBa7NCcLh9eirUA19hABLJ6dt/t6fdE5CNc2FZ+iAoyE8JfNwYKAd |
---|
349 | 6Fa3HqUBPNWt8ryj4ftgpMNBdfmLugEM4N20SXJA28hOq2lUcwNKQQ1xQrovl0ig |
---|
350 | iMbMWytV4gUPKC9Wra66OYIkk/K8teiUNIYA4JwAUVTs1NEWoyfwUTz1onutCkMl |
---|
351 | 5vY7JAqRoDWoSUX6FI+IHUdyqPAMdOMhC37gjrxoo2ECgYEA7trDMu6xsOwEckDh |
---|
352 | iz148kejMlnTTuCNetOFBw3njFgxISx0PrDLWmJmnHMxPv9AAjXYb2+UCCm3fj6Q |
---|
353 | OB8o4ZJm0n504qbFHcb2aI22U5hZ99ERvqx8WBnJ2RarIBmg06y0ktxq8gFR2qxF |
---|
354 | 0hWAOcDn1DWQ8QI0XBiFFcJTGtcCgYEA5SdlIXRnVZDKi5YufMAORG9i74dXUi0Y |
---|
355 | 02UoVxJ+q8VFu+TT8wrC5UQehG3gX+79Cz7hthhDqOSCv6zTyE4Evb6vf9OLgnVe |
---|
356 | E5iLF033zCxLSS9MgiZ+jTO+wK3RsapXDtGcSEk2P82Pj5seNf4Ei1GNCRlm1DbX |
---|
357 | 71wlikprHhECgYABqmLcExAIJM0vIsav2uDiB5/atQelMCmsZpcx4mXv85l8GrxA |
---|
358 | x6jTW4ZNpvv77Xm7yjZVKJkGqYvPBI6q5YS6dfPjmeAkyHbtazrCpeJUmOZftQSD |
---|
359 | qN5BGwTuT5sn4SXe9ABaWdEhGONCPBtMiLvZK0AymaEGHTbSQZWD/lPoBwKBgGhk |
---|
360 | qg2zmd/BNoSgxkzOsbE7jTbR0VX+dXDYhKgmJM7b8AjJFkWCgYcwoTZzV+RcW6rj |
---|
361 | 2q+6HhizAV2QvmpiIIbQd+Mj3EpybYk/1R2ox1qcUy/j/FbOcpihGiVtCjqF/2Mg |
---|
362 | 2rGTqMMoQl6JrBmsvyU44adjixTiZz0EHZYCkQoBAoGBAMRdmoR4mgIIWFPgSNDM |
---|
363 | ISLJxKvSFPYDLyAepLfo38NzKfPB/XuZrcOoMEWRBnLl6dNN0msuzXnPRcn1gc1t |
---|
364 | TG7db+hivAyUoRkIW3dB8pRj9dDUqO9OohjKsJxJaQCyH5vPkQFSLbTIgWrHhU+3 |
---|
365 | oSPiK/YngDV1AOmPDH7i62po |
---|
366 | -----END PRIVATE KEY----- |
---|
367 | """, #6 |
---|
368 | """-----BEGIN CERTIFICATE----- |
---|
369 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
370 | bmd5MB4XDTIwMDEwMjAxNTExMloXDTIxMDEwMTAxNTExMlowFzEVMBMGA1UEAwwM |
---|
371 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAojGu |
---|
372 | fQaTVT9DJWJ/zogGfrryEJXYVy9c441O5MrLlRx7nCIWIUs2NEhHDJdqJjYOTdmk |
---|
373 | K98VhdMpDPZwxjgvvZrh43lStBRIW3zZxv747rSl2VtpSqD/6UNWJe5u4SR7oga4 |
---|
374 | JfITOKHg/+ASxnOxp/iu6oT6jBL6T7KSPh6Rf2+it2rsjhktRreFDJ2hyroNq1w4 |
---|
375 | ZVNCcNPgUIyos8u9RQKAWRNchFh0p0FCS9xNrn3e+yHnt+p6mOOF2gMzfXT/M2hq |
---|
376 | KQNmc5D3yNoH2smWoz7F3XsRjIB1Ie4VWoRRaGEy7RwcwiDfcaemD0rQug6iqH7N |
---|
377 | oomF6f3R4DyvVVLUkQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB/8SX6qyKsOyex |
---|
378 | v3wubgN3FPyU9PqMfEzrFM6X5sax0VMVbSnekZrrXpdnXYV+3FBu2GLLQc900ojj |
---|
379 | vKD+409JIriTcwdFGdLrQPTCRWkEOae8TlXpTxuNqJfCPVNxFN0znoat1bSRsX1U |
---|
380 | K0mfEETQ3ARwlTkrF9CM+jkU3k/pnc9MoCLif8P7OAF38AmIbuTUG6Gpzy8RytJn |
---|
381 | m5AiA3sds5R0rpGUu8mFeBpT6jIA1QF2g+QNHKOQcfJdCdfqTjKw5y34hjFqbWG9 |
---|
382 | RxWGeGNZkhC/jADCt+m+R6+hlyboLuIcVp8NJw6CGbr1+k136z/Dj+Fdhm6FzF7B |
---|
383 | qULeRQJ+ |
---|
384 | -----END CERTIFICATE----- |
---|
385 | -----BEGIN PRIVATE KEY----- |
---|
386 | MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCiMa59BpNVP0Ml |
---|
387 | Yn/OiAZ+uvIQldhXL1zjjU7kysuVHHucIhYhSzY0SEcMl2omNg5N2aQr3xWF0ykM |
---|
388 | 9nDGOC+9muHjeVK0FEhbfNnG/vjutKXZW2lKoP/pQ1Yl7m7hJHuiBrgl8hM4oeD/ |
---|
389 | 4BLGc7Gn+K7qhPqMEvpPspI+HpF/b6K3auyOGS1Gt4UMnaHKug2rXDhlU0Jw0+BQ |
---|
390 | jKizy71FAoBZE1yEWHSnQUJL3E2ufd77Iee36nqY44XaAzN9dP8zaGopA2ZzkPfI |
---|
391 | 2gfayZajPsXdexGMgHUh7hVahFFoYTLtHBzCIN9xp6YPStC6DqKofs2iiYXp/dHg |
---|
392 | PK9VUtSRAgMBAAECggEANjn0A3rqUUr4UQxwfIV/3mj0O1VN4kBEhxOcd+PRUsYW |
---|
393 | EapXycPSmII9ttj8tU/HUoHcYIqSMI7bn6jZJXxtga/BrALJAsnxMx031k8yvOQK |
---|
394 | uvPT7Q6M4NkReVcRHRbMeuxSLuWTRZDhn8qznEPb9rOvD1tsRN6nb3PdbwVbUcZh |
---|
395 | 2F6JDrTyI/Df6nrYQAWOEe2ay7tzgrNYE4vh+DW7oVmyHRgFYA+DIG5Q+7OVWeW5 |
---|
396 | bwYYPKlo4/B0L+GfMKfMVZ+5TvFWAK0YD1e/CW1Gv+i/8dWm4O7UNGg5mTnrIcy1 |
---|
397 | g5wkKbyea02/np2B/XBsSWXDl6rTDHL7ay0rH2hjEQKBgQDMKSm3miQTIcL/F2kG |
---|
398 | ieapmRtSc7cedP967IwUfjz4+pxPa4LiU47OCGp1bmUTuJAItyQyu/5O3uLpAriD |
---|
399 | PTU+oVlhqt+lI6+SJ4SIYw01/iWI3EF2STwXVnohWG1EgzuFM/EqoB+mrodNONfG |
---|
400 | UmP58vI9Is8fdugXgpTz4Yq9pQKBgQDLYJoyMVrYTvUn5oWft8ptsWZn6JZXt5Bd |
---|
401 | aXh+YhNmtCrSORL3XjcH4yjlcn7X8Op33WQTbPo7QAJ1CumJzAI88BZ/8za638xb |
---|
402 | nLueviZApCt0bNMEEdxDffxHFc5TyHE+obMKFfApbCnD0ggO6lrZ8jK9prArLOCp |
---|
403 | mRU9SSRffQKBgAjoBszeqZI4F9SfBdLmMyzU5A89wxBOFFMdfKLsOua1sBn627PZ |
---|
404 | 51Hvpg1HaptoosfujWK1NsvkB0wY9UmsYuU/jrGnDaibnO4oUSzN/WaMlsCYszZg |
---|
405 | zYFLIXrQ67tgajlOYcf1Qkw4MujYgPlC4N+njI/EM/rwagGUjcDx5uaNAoGASyqz |
---|
406 | EuYG63eTSGH89SEaohw0+yaNmnHv23aF4EAjZ4wjX3tUtTSPJk0g6ly84Nbb8d1T |
---|
407 | hZJ7kbaAsf2Mfy91jEw4JKYhjkP05c8x0OP6g12p6efmvdRUEmXX/fXjQjgNEtb0 |
---|
408 | sz+UedrOPN+9trWLSo4njsyyw+JcTpKTtQj5dokCgYEAg9Y3msg+GvR5t/rPVlKd |
---|
409 | keZkrAp0xBJZgqG7CTPXWS1FjwbAPo7x4ZOwtsgjCuE52lar4j+r2Il+CDYeLfxN |
---|
410 | h/Jfn6S9ThUh+B1PMvKMMnJUahg8cVL8uQuBcbAy8HPRK78WO2BTnje44wFAJwTc |
---|
411 | 0liuYqVxZIRlFLRl8nGqog8= |
---|
412 | -----END PRIVATE KEY----- |
---|
413 | """, #7 |
---|
414 | """-----BEGIN CERTIFICATE----- |
---|
415 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
416 | bmd5MB4XDTIwMDEwMjAxNTExMloXDTIxMDEwMTAxNTExMlowFzEVMBMGA1UEAwwM |
---|
417 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu9oO |
---|
418 | cFlNukUcLfFrfkEaUiilcHLmn5OokQbj95CGd2ehQCCVwrkunYLBisthRaancFFb |
---|
419 | /yM998B0IUsKTsoLi5DAN3/SkSm6GiQIGO05E4eBPljwJ61QQMxh8+1TwQ9HTun1 |
---|
420 | ZE1lhVN1aRmI9VsbyTQLjXh9OFNLSJEKb29mXsgzYwYwNOvo+idzXpy4bMyNoGxY |
---|
421 | Y+s2FIKehNHHCv4ravDn8rf6DtDOvyN4d0/QyNws9FpAZMXmLwtBJ9exOqKFW43w |
---|
422 | 97NxgdNiTFyttrTKTi0b+9v3GVdcEZw5b2RMIKi6ZzPof6/0OlThK6C3xzFK3Bp4 |
---|
423 | PMjTfXw5yyRGVBnZZwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQA4Ms6LqzMu757z |
---|
424 | bxISiErRls6fcnq0fpSmiPNHNKM7YwG9KHYwPT6A0UMt30zDwNOXCQBI19caGeeO |
---|
425 | MLPWa7Gcqm2XZB2jQwvLRPeFSy9fm6RzJFeyhrh/uFEwUetwYmi/cqeIFDRDBQKn |
---|
426 | bOaXkBk0AaSmI5nRYfuqpMMjaKOFIFcoADw4l9wWhv6DmnrqANzIdsvoSXi5m8RL |
---|
427 | FcZQDZyHFlHh3P3tLkmQ7ErM2/JDwWWPEEJMlDm/q47FTOQSXZksTI3WRqbbKVv3 |
---|
428 | iQlJjpgi9yAuxZwoM3M4975iWH4LCZVMCSqmKCBt1h9wv4LxqX/3kfZhRdy1gG+j |
---|
429 | 41NOSwJ/ |
---|
430 | -----END CERTIFICATE----- |
---|
431 | -----BEGIN PRIVATE KEY----- |
---|
432 | MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC72g5wWU26RRwt |
---|
433 | 8Wt+QRpSKKVwcuafk6iRBuP3kIZ3Z6FAIJXCuS6dgsGKy2FFpqdwUVv/Iz33wHQh |
---|
434 | SwpOyguLkMA3f9KRKboaJAgY7TkTh4E+WPAnrVBAzGHz7VPBD0dO6fVkTWWFU3Vp |
---|
435 | GYj1WxvJNAuNeH04U0tIkQpvb2ZeyDNjBjA06+j6J3NenLhszI2gbFhj6zYUgp6E |
---|
436 | 0ccK/itq8Ofyt/oO0M6/I3h3T9DI3Cz0WkBkxeYvC0En17E6ooVbjfD3s3GB02JM |
---|
437 | XK22tMpOLRv72/cZV1wRnDlvZEwgqLpnM+h/r/Q6VOEroLfHMUrcGng8yNN9fDnL |
---|
438 | JEZUGdlnAgMBAAECggEALlZdlW0R9U6y4spYf65Dddy84n4VUWu0+wE+HoUyBiYz |
---|
439 | 6oOfLYdMbmIgp8H/XpT7XINVNBxXXtPEUaoXAtRoAKdWItqO8Gvgki4tKSjrGVwl |
---|
440 | j2GU69SepT1FNExoiojgSCEB/RnyXu71WVWJKSyuL/V8nAsKqGgze9T7Q/2wvNQt |
---|
441 | SQqLxZlrWF0P8WqaAiSrHV4GnDrdeF+k1KBo2+pSaDNv6cNwOyVG8EII9tqhF8kj |
---|
442 | 6nD6846ish6OqmlSisaSGopJZL1DCQzszFMxKd2+iBDY7Kn6hVIhRaNnaZUFhpKM |
---|
443 | dNh6hBqOycMepAp0sz5pdo+fxpifkoR/cPWgyC3QkQKBgQDixe9VsiZ7u2joxF/9 |
---|
444 | JcAExKhqE28OUmIwt6/j+uzYShxN6Oo9FUo3ICtAPCCFsjhvb3Qum7FspmxrqtNy |
---|
445 | fzclibZJPO8ey2PzqaiOfiVfgJmNSvoCOdgM4OqFLtRO6eSTzhJeI4VPrPcq/5la |
---|
446 | 0FuOi1WZs/Au9llqLqGSDH3UAwKBgQDUD/bSJbOk5SvNjFtFm0ClVJr66mJ5e4uN |
---|
447 | 4VGv8KGFAJ+ExIxujAukfKdwLjS1wEy2RePcshfT8Y9FVh/Q1KzzrQi3Gwmfq1G6 |
---|
448 | Dpu2HlJpaZl+9T81x2KS8GP3QNczWMe2nh7Lj+6st+b4F+6FYbVTFnHaae27sXrD |
---|
449 | XPX15+uxzQKBgGy+pBWBF4kwBo/QU4NuTdU7hNNRPGkuwl1ASH1Xv6m8aDRII8Nk |
---|
450 | 6TDkITltW98g5oUxehI7oOpMKCO9SCZYsNY0YpBeQwCOYgDfc6/Y+A0C+x9RO/BD |
---|
451 | UsJiPLPfD/pDmNPz9sTj3bKma+RXq29sCOujD0pkiiHLCnerotkJWnGHAoGAAkCJ |
---|
452 | JoIv/jhQ1sX+0iZr8VWMr819bjzZppAWBgBQNtFi4E4WD7Z9CSopvQ9AkA2SwvzL |
---|
453 | BrT9e8q88sePXvBjRdM4nHk1CPUQ0SEGllCMH4J3ltmT6kZLzbOv3BhcMLdop4/W |
---|
454 | U+MbbcomMcxPRCtdeZxraR5m3+9qlliOZCYqYqECgYA5eLdxgyHxCS33QGFHRvXI |
---|
455 | TLAHIrr7wK1xwgkmZlLzYSQ8Oqh1UEbgoMt4ulRczP2g7TCfvANw2Sw0H2Q5a6Fj |
---|
456 | cnwVcXJ38DLg0GCPMwzE8dK7d8tKtV6kGiKy+KFvoKChPjE6uxhKKmCJaSwtQEPS |
---|
457 | vsjX3iiIgUQPsSz8RrNFfQ== |
---|
458 | -----END PRIVATE KEY----- |
---|
459 | """, #8 |
---|
460 | """-----BEGIN CERTIFICATE----- |
---|
461 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
462 | bmd5MB4XDTIwMDEwMjAxNTExMloXDTIxMDEwMTAxNTExMlowFzEVMBMGA1UEAwwM |
---|
463 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5DNu |
---|
464 | CKhhl6wCbgoCkFemwJh3ATbAjhInHpvQWIFDfSK1USElCKxqosIxiBQCx3Zs2d/U |
---|
465 | GeIA7QAM2atNdXaateacEaKMmGE9LEtO0Dg5lmT43WzmGkG9NmCwK3JjAekc5S9d |
---|
466 | HKNtEQo7o8RKfj81zlDSq2kzliy98cimk24VBBGkS2Cn7Vy/mxMCqWjQazTXbpoS |
---|
467 | lXw6LiY5wFXQmXOB5GTSHvqyCtBQbOSSbJB77z/fm7bufTDObufTbJIq53WPt00Y |
---|
468 | f+JNnzkX1X0MaBCUztoZwoMaExWucMe/7xsQ46hDn6KB4b0lZk+gsK45QHxvPE1R |
---|
469 | 72+ZkkIrGS/ljIKahQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQDib1653CneSmy2 |
---|
470 | gYzGeMlrI05Jqo3JuHNMQHzAjIrb4ee57VA4PTQa1ygGol/hVv6eTvZr3p2ospDS |
---|
471 | 5Kfwj1HLO4jSMX1Bnm1FG0naQogz2CD3xfYjbYOVRhAxpld1MNyRveIOhDRARY7N |
---|
472 | XNAaNPZ1ALrwbENSYArr18xDzgGWe/dgyRCEpCFIsztiA+7jGvrmAZgceIE8K3h3 |
---|
473 | fkvNmXBH58ZHAGTiyRriBZqS+DXrBrQOztXSJwFnOZnRt6/efeBupt8j5hxVpBLW |
---|
474 | vtjpBc23uUcbbHOY2AW2Bf+vIr4/LmJ/MheKV+maa2990vmC93tvWlFfc74mgUkW |
---|
475 | HJfXDmR6 |
---|
476 | -----END CERTIFICATE----- |
---|
477 | -----BEGIN PRIVATE KEY----- |
---|
478 | MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDkM24IqGGXrAJu |
---|
479 | CgKQV6bAmHcBNsCOEicem9BYgUN9IrVRISUIrGqiwjGIFALHdmzZ39QZ4gDtAAzZ |
---|
480 | q011dpq15pwRooyYYT0sS07QODmWZPjdbOYaQb02YLArcmMB6RzlL10co20RCjuj |
---|
481 | xEp+PzXOUNKraTOWLL3xyKaTbhUEEaRLYKftXL+bEwKpaNBrNNdumhKVfDouJjnA |
---|
482 | VdCZc4HkZNIe+rIK0FBs5JJskHvvP9+btu59MM5u59NskirndY+3TRh/4k2fORfV |
---|
483 | fQxoEJTO2hnCgxoTFa5wx7/vGxDjqEOfooHhvSVmT6CwrjlAfG88TVHvb5mSQisZ |
---|
484 | L+WMgpqFAgMBAAECggEABTdPuo7uvCLIY2+DI319aEWT4sk3mYe8sSxqlLtPqZqT |
---|
485 | fmk9iXc3cMTzkOK0NY71af19waGy17f6kzchLCAr5SCCTLzkbc87MLn/8S530oI4 |
---|
486 | VgdZMxxxkL6hCD0zGiYT7QEqJa9unMcZGeMwuLYFKtQaHKTo8vPO26n0dMY9YLxj |
---|
487 | cNUxsKLcKk8dbfKKt4B4fZgB7nU0BG9YbKYZ3iZ7/3mG+6jA6u+VYc/WHYQjTmpL |
---|
488 | oLFN7NOe3R7jIx/kJ1OqNWqsFoLpyiiWd1Mr0l3EdD1kCudptMgD8hd++nx2Yk2w |
---|
489 | K4+CpOVIN/eCxDDaAOJgYjCtOayVwUkDAxRRt9VnAQKBgQD5s1j6RJtBNTlChVxS |
---|
490 | W3WpcG4q8933AiUY/Chx0YTyopOiTi7AGUaA8AOLFBcO2npa+vzC+lvuOyrgOtVW |
---|
491 | sD10H2v5jNKlbeBp+Q9rux2LAyp4TvzdXWKhVyZrdtITF0hn6vEYNp7MtyWRFb1O |
---|
492 | 3Ie5HQBPHtzllFOMynacjOdjpQKBgQDp9TrbfOmwGWmwPKmaFKuy8BKxjJM+ct0X |
---|
493 | 4Xs1uSy9Z9Y8QlDNbNaooI8DA1NY0jDVHwemiGC4bYsBNKNRcbI0s2nr0hQMft42 |
---|
494 | P/NpugHv0YXiVz+5bfim4woTiHHbfREqchlIGo3ryClAiDU9fYZwTOtb9jPIhX3G |
---|
495 | 9v+OsoMlYQKBgQDJUQW90S5zJlwh+69xXvfAQjswOimNCpeqSzK4gTn0/YqV4v7i |
---|
496 | Nf6X2eqhaPMmMJNRYuYCtSMFMYLiAc0a9UC2rNa6/gSfB7VU+06phtTMzSKimNxa |
---|
497 | BP6OIduB7Ox2I+Fmlw8GfJMPbeHF1YcpW7e5UV58a9+g4TNzYZC7qwarWQKBgQCA |
---|
498 | FFaCbmHonCD18F/REFvm+/Lf7Ft3pp5PQouXH6bUkhIArzVZIKpramqgdaOdToSZ |
---|
499 | SAGCM8rvbFja8hwurBWpMEdeaIW9SX8RJ/Vz/fateYDYJnemZgPoKQcNJnded5t8 |
---|
500 | Jzab+J2VZODgiTDMVvnQZOu8To6OyjXPRM0nK6cMQQKBgQDyX44PHRRhEXDgJFLU |
---|
501 | qp2ODL54Qadc/thp2m+JmAvqmCCLwuYlGpRKVkLLuZW9W6RlVqarOC3VD3wX5PRZ |
---|
502 | IsyCGLi+Jbrv9JIrYUXE80xNeQVNhrrf02OW0KHbqGxRaNOmp1THPw98VUGR2J/q |
---|
503 | YAp6XUXU7LEBUrowye+Ty2o7Lg== |
---|
504 | -----END PRIVATE KEY----- |
---|
505 | """, #9 |
---|
506 | """-----BEGIN CERTIFICATE----- |
---|
507 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
508 | bmd5MB4XDTIwMDEwMjAxNTExMVoXDTIxMDEwMTAxNTExMVowFzEVMBMGA1UEAwwM |
---|
509 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1k2R |
---|
510 | PWYihftppo3CoxeseFwgg7guxZVkP7aAur5uBzSeAB7sBG1G2bRrwMX71S4xPwot |
---|
511 | zYiEoxUrTStUqEKjL2aozfHsXnHZ7kwwUgZFDZUg+ve2tZDA3HCUr4tLYKlyFqpx |
---|
512 | 2nCouc45MjQ4wAxRl4rQxIUG2uSTzvP+xXtjoJYMIEEyCpcsRXfqfVkEUe9nrPsF |
---|
513 | 0Ibzk7Cyt75HDI4uEzBuHux0DYuGy6R02jz/vf/dIZ4WepjSY06xpblTHZgieDRX |
---|
514 | fU2+YOcvb0eDHyA8Q5p8ropK71MNIP5+kffFd90SVr4EkCA8S+cd6FdKQasRr+jF |
---|
515 | 9MUhMS4ObvlrYTG+hwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCy62MZ3+59/VpX |
---|
516 | c9Hsmb4/BMWt0irLJit4w4SkuYKGFLCMKZI4LN4pEkXaiE1eqF2DNS1qOvl5luty |
---|
517 | Zz4oggrqilwuFeH98o9Zeg9SYnouuypORVP/3DPbJF/jiQg5J8kJb1sy+BjRiT8I |
---|
518 | 5X6/cCBYT+MljFz5tpqWOtWTgA30e1BV8JFj8F4dgUcWsAVT/I4l9zgMLUnhcO6E |
---|
519 | wLtEE0I6aT1RHJB28ndwJzj4La98Oirw7LAEAWbExWYB90ypLaGY+JVJe3f5fijC |
---|
520 | fJpQ2mbs4syXDmb5bU2C2pGPTKZPcyx15iQrq1uHInD0facOw+pmllAFxuG96lA1 |
---|
521 | +o2VzKwP |
---|
522 | -----END CERTIFICATE----- |
---|
523 | -----BEGIN PRIVATE KEY----- |
---|
524 | MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDWTZE9ZiKF+2mm |
---|
525 | jcKjF6x4XCCDuC7FlWQ/toC6vm4HNJ4AHuwEbUbZtGvAxfvVLjE/Ci3NiISjFStN |
---|
526 | K1SoQqMvZqjN8execdnuTDBSBkUNlSD697a1kMDccJSvi0tgqXIWqnHacKi5zjky |
---|
527 | NDjADFGXitDEhQba5JPO8/7Fe2OglgwgQTIKlyxFd+p9WQRR72es+wXQhvOTsLK3 |
---|
528 | vkcMji4TMG4e7HQNi4bLpHTaPP+9/90hnhZ6mNJjTrGluVMdmCJ4NFd9Tb5g5y9v |
---|
529 | R4MfIDxDmnyuikrvUw0g/n6R98V33RJWvgSQIDxL5x3oV0pBqxGv6MX0xSExLg5u |
---|
530 | +WthMb6HAgMBAAECggEAeCyRSNwQeg/NZD/UqP6qkegft52+ZMBssinWsGH/c3z3 |
---|
531 | KVwtwCHDfGvnjPe5TAeWSCKeIsbukkFZwfGNjLmppvgrqymCAkhYDICfDDBF4uMA |
---|
532 | 1pu40sJ01Gkxh+tV/sOmnb1BEVzh0Sgq/NM6C8ActR18CugKOw+5L3G2KeoSqUbT |
---|
533 | 2hcPUsnik10KwqW737GQW4LtEQEr/iRmQkxI3+HBzvPWjFZzjOcpUph+FW5TXtaU |
---|
534 | T26mt1j+FjbdvvhCuRMY/VZBJ5h1RKU95r57F1AjW/C0RRJ8FxR1CeSy4IlmQBrh |
---|
535 | 6wAa3Tdm0k/n4ZspC9bF5eVTJEtb0AohiYZrIa8MuQKBgQD8yjCLYa41H304odCx |
---|
536 | NwPRJcmlIk5YGxPrhHAT9GEgU6n/no7YMVx1L7fNLcMjAyx54jauEU7J19Aki7eV |
---|
537 | SIdU9TwqmkOAFfM6TOEJZiOi66gABOxeK2yDyfmR6Apaw3caku4O058t4KVwHSCB |
---|
538 | DanYCMzxCBqS9jUTTyAh0fMg6wKBgQDZBkIukg3FKPor5LzkUXIKnNHYPfHbERHw |
---|
539 | piWS6GZwqhuWNlOCWxiBR4rEUU/RbFQZw/FCi5OuAk2lBC0LBmC0/Sz4/+xDdCbv |
---|
540 | uNhMOTRcy9nFVpmpIWCx4N/KmXHEuFxli/JNXux7iki74AVC9VPrAt/kCvwf06Df |
---|
541 | oDb8ljdR1QKBgQChVOD6c5Lc8IXYeN1Z3IShHH6+11AsxstFyjZFZff+y6Z5L1Z2 |
---|
542 | /7nESHoDhqs9Uy81cnv3R7CC/Ssnx8uYiLtmK0UE44Mk4d1jXeFZQEiKF+AWcw3v |
---|
543 | Y8NTsLmItxC0sH75BMDN0Z2LiA3Nqaku8+trpuI1Cjj7hgqFkkAtlXKXlQKBgBMb |
---|
544 | c/Q5s7CqHOyEZQUNDqdUiz0opwSMijHPzvsSLwK4V1lwSwXtE0k+jT8fkZF0oirq |
---|
545 | j3E2bLgjR8bBiV2xIA6PQ8hgb+K4dT0h3xlG6A9Le07egwTbBXJjxBBIVjXlrWzb |
---|
546 | V2fsdZGi6ShxXsU4aD0GscOYG/6JWV6W8oBmkVRJAoGAepIZ+OYmFjb7uxdh4EtP |
---|
547 | hluEtx5bLOLuo6c0S149omUXUhbsuyzTZS6Ip9ySDMnK3954c4Q4WJ4yQKixQNVq |
---|
548 | 78aDfy4hP/8TE/Q9CRddUof2P33PJMhVNqzTRYMpqV+zxifvtw3hoDTLKHTQxCR2 |
---|
549 | M1+O4VvokU5pBqUpGXiMDfs= |
---|
550 | -----END PRIVATE KEY----- |
---|
551 | """, #10 |
---|
552 | """-----BEGIN CERTIFICATE----- |
---|
553 | MIICojCCAYoCAQEwDQYJKoZIhvcNAQELBQAwFzEVMBMGA1UEAwwMbmV3cGJfdGhp |
---|
554 | bmd5MB4XDTIwMDEwMjAxNTExMVoXDTIxMDEwMTAxNTExMVowFzEVMBMGA1UEAwwM |
---|
555 | bmV3cGJfdGhpbmd5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnbCU |
---|
556 | M37hG7zrCyyJEI6pZmOomnI+CozbP5KAhWSV5y7R5H6lcAEG2UDV+lCUxHT2ufOa |
---|
557 | i1H16bXyBt7VoMTHIH50S58NUCUEXcuRWVR16tr8CzcTHQAkfIrmhY2XffPilX7h |
---|
558 | aw35UkoVmXcqSDNNJD6jmvWexvmbhzVWW8Vt5Pivet2/leVuqPXB54/alSbkC74m |
---|
559 | x6X5XKQc6eyPsb1xvNBuiSpFzdqbEn7lUwj6jFTkh9tlixgmgx+J0XoQXbawyrAg |
---|
560 | rcIQcse/Ww+KBA1KSccFze+XBTbIull4boYhbJqkb6DW5bY7/me2nNxE9DRGwq+S |
---|
561 | kBsKq3YKeCf8LEhfqQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAD+tWGFhINYsWT |
---|
562 | ibKWlCGgBc5uB7611cLCevx1yAL6SaOECVCQXzaaXIaETSbyY03UO2yBy3Pl10FV |
---|
563 | GYXLrAWTFZsNVJm55XIibTNw1UBPNwdIoCSzAYuOgMF0GHhTTQU0hNYWstOnnE2T |
---|
564 | 6lSAZQZFkaW4ZKs6sUp42Em9Bu99PehyIgnw14qb9NPg5qKdi2GAvkImZCrGpMdK |
---|
565 | OF31U7Ob0XQ0lxykcNgG4LlUACd+QxLfNpmLBZUGfikexYa1VqBFm3oAvTt8ybNQ |
---|
566 | qr7AKXDFnW75aCBaMpQWzrstA7yYZ3D9XCd5ZNf6d08lGM/oerDAIGnZOZPJgs5U |
---|
567 | FaWPHdS9 |
---|
568 | -----END CERTIFICATE----- |
---|
569 | -----BEGIN PRIVATE KEY----- |
---|
570 | MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCdsJQzfuEbvOsL |
---|
571 | LIkQjqlmY6iacj4KjNs/koCFZJXnLtHkfqVwAQbZQNX6UJTEdPa585qLUfXptfIG |
---|
572 | 3tWgxMcgfnRLnw1QJQRdy5FZVHXq2vwLNxMdACR8iuaFjZd98+KVfuFrDflSShWZ |
---|
573 | dypIM00kPqOa9Z7G+ZuHNVZbxW3k+K963b+V5W6o9cHnj9qVJuQLvibHpflcpBzp |
---|
574 | 7I+xvXG80G6JKkXN2psSfuVTCPqMVOSH22WLGCaDH4nRehBdtrDKsCCtwhByx79b |
---|
575 | D4oEDUpJxwXN75cFNsi6WXhuhiFsmqRvoNbltjv+Z7ac3ET0NEbCr5KQGwqrdgp4 |
---|
576 | J/wsSF+pAgMBAAECggEAPSu1ofBTRN5ZU4FYPlsJLdX1Hsy4coFHv/aF8rkdSYwp |
---|
577 | EflrFfLgBEEZgLvnqfoxh9sPFYKa4amaFL42ouIS2PEVDgzKLk/dzMDeRof0IkIG |
---|
578 | yhb4TCS1ArcjS6WsociNGi8ZJN1L3Xctv9WxSkbUYv4Fm2Qyzr8fbSjssjb5NXwD |
---|
579 | K11fsj6Pfy/mQrI0TSTlzWC7ARIlCMTWQ8G8zEU6bMFIG6DMjt2J4VgYVXUKetZA |
---|
580 | VPuS+pwkH2obQe6FLRuiNxH4GitVAASYPea6foER4AggBMRp8q8F6+WssjoyEORb |
---|
581 | 0sJxmnxhznoTRMCuTsUj6XMgmOTOnA3lQXsIB0DYcQKBgQDO6mMRVVFWzgkE9Q5/ |
---|
582 | 36n06KvGYF9TCRDL9vRC8kCqcGd1Hy6jRj0D8049KUHaN74pfWg6gsQjPkKzwKnC |
---|
583 | vxNl72tVvLqm7Fo531BGfKK/46ZvxeWMMraNW4+9LhwMPu2LN5OEdwwCgyaURpxh |
---|
584 | ktCp+RrGjz08Kn82X1jJPdwxDQKBgQDDGMvZ7ZUDGq5+RJkmHJ58lQtiaMZclmYV |
---|
585 | R9YwOxJV6ino3EYrGOtUkqiemgAACdMWE/JMJlB1/JINawJwUsZ2XDp/9jNLPgLc |
---|
586 | gphCmagaO34U/YMaJbJIK2gkCX7p8EcD+x45qWa0bEMPW38QfN/qQdUPjNmpuIiI |
---|
587 | Zleyl1TqDQKBgQCvIoat0ighsAzETGN0aqzhJdrW8xVcJA06hpFi5MdFPBTldno0 |
---|
588 | KqxUXqj3badWe94SIhqJg8teBUHSAZ3uv2o82nRgQnk99km8OD8rGi1q+9YRP1C2 |
---|
589 | 5OnNJhW4y4FkABNxxZ2v/k+FBNsvn8CXefvyEm3OaMks1s+MBxIQa7KnNQKBgFwX |
---|
590 | HUo+GiN/+bPCf6P8yFa4J8qI+HEF0SPkZ9cWWx5QzP2M1FZNie++1nce7DcYbBo0 |
---|
591 | yh9lyn8W/H328AzDFckS2c5DEY1HtSQPRP3S+AWB5Y7U54h1GMV2L88q6ExWzb60 |
---|
592 | T10aeE9b9v+NydmniC5UatTPQIMbht8Tp/u18TAVAoGBAJphAfiqWWV2M5aBCSXq |
---|
593 | WxLZ71AJ0PZBmRa/9iwtccwXQpMcW6wHK3YSQxci+sB97TElRa3/onlVSpohrUtg |
---|
594 | VCvCwfSHX1LmrfWNSkoJZwCQt+YYuMqW86K0tzLzI1EMjIH9LgQvB6RR26PZQs+E |
---|
595 | jr1ZvRc+wPTq6sxCF1h9ZAfN |
---|
596 | -----END PRIVATE KEY----- |
---|
597 | """, #11 |
---|
598 | ] |
---|
599 | |
---|
600 | # To disable the pre-computed tub certs, uncomment this line. |
---|
601 | # SYSTEM_TEST_CERTS = [] |
---|
602 | |
---|
603 | |
---|
604 | def flush_but_dont_ignore(res): |
---|
605 | d = flushEventualQueue() |
---|
606 | def _done(ignored): |
---|
607 | return res |
---|
608 | d.addCallback(_done) |
---|
609 | return d |
---|
610 | |
---|
611 | |
---|
612 | def _render_config(config): |
---|
613 | """ |
---|
614 | Convert a ``dict`` of ``dict`` of ``unicode`` to an ini-format string. |
---|
615 | """ |
---|
616 | return u"\n\n".join(list( |
---|
617 | _render_config_section(k, v) |
---|
618 | for (k, v) |
---|
619 | in config.items() |
---|
620 | )) |
---|
621 | |
---|
622 | def _render_config_section(heading, values): |
---|
623 | """ |
---|
624 | Convert a ``unicode`` heading and a ``dict`` of ``unicode`` to an ini-format |
---|
625 | section as ``unicode``. |
---|
626 | """ |
---|
627 | return u"[{}]\n{}\n".format( |
---|
628 | heading, _render_section_values(values) |
---|
629 | ) |
---|
630 | |
---|
631 | def _render_section_values(values): |
---|
632 | """ |
---|
633 | Convert a ``dict`` of ``unicode`` to the body of an ini-format section as |
---|
634 | ``unicode``. |
---|
635 | """ |
---|
636 | return u"\n".join(list( |
---|
637 | u"{} = {}".format(k, v) |
---|
638 | for (k, v) |
---|
639 | in sorted(values.items()) |
---|
640 | )) |
---|
641 | |
---|
642 | |
---|
643 | @async_to_deferred |
---|
644 | async def spin_until_cleanup_done(value=None, timeout=10): |
---|
645 | """ |
---|
646 | At the end of the test, spin until the reactor has no more DelayedCalls |
---|
647 | and file descriptors (or equivalents) registered. This prevents dirty |
---|
648 | reactor errors, while also not hard-coding a fixed amount of time, so it |
---|
649 | can finish faster on faster computers. |
---|
650 | |
---|
651 | There is also a timeout: if it takes more than 10 seconds (by default) for |
---|
652 | the remaining reactor state to clean itself up, the presumption is that it |
---|
653 | will never get cleaned up and the spinning stops. |
---|
654 | |
---|
655 | Make sure to run as last thing in tearDown. |
---|
656 | """ |
---|
657 | def num_fds(): |
---|
658 | if hasattr(reactor, "handles"): |
---|
659 | # IOCP! |
---|
660 | return len(reactor.handles) |
---|
661 | else: |
---|
662 | # Normal reactor; having internal readers still registered is fine, |
---|
663 | # that's not our code. |
---|
664 | return len( |
---|
665 | set(reactor.getReaders()) - set(reactor._internalReaders) |
---|
666 | ) + len(reactor.getWriters()) |
---|
667 | |
---|
668 | for i in range(timeout * 1000): |
---|
669 | # There's a single DelayedCall for AsynchronousDeferredRunTest's |
---|
670 | # timeout... |
---|
671 | if (len(reactor.getDelayedCalls()) < 2 and num_fds() == 0): |
---|
672 | break |
---|
673 | await deferLater(reactor, 0.001) |
---|
674 | return value |
---|
675 | |
---|
676 | |
---|
677 | class SystemTestMixin(pollmixin.PollMixin, testutil.StallMixin): |
---|
678 | |
---|
679 | # If set to True, use Foolscap for storage protocol. If set to False, HTTP |
---|
680 | # will be used when possible. If set to None, this suggests a bug in the |
---|
681 | # test code. |
---|
682 | FORCE_FOOLSCAP_FOR_STORAGE : Optional[bool] = None |
---|
683 | |
---|
684 | # If True, reduce the timeout on connections: |
---|
685 | REDUCE_HTTP_CLIENT_TIMEOUT : bool = True |
---|
686 | |
---|
687 | def setUp(self): |
---|
688 | if os.getenv("TAHOE_DEBUG_BLOCKING") == "1": |
---|
689 | from .blocking import catch_blocking_in_event_loop |
---|
690 | catch_blocking_in_event_loop(self) |
---|
691 | |
---|
692 | self._http_client_pools = [] |
---|
693 | http_client.StorageClientFactory.start_test_mode(self._got_new_http_connection_pool) |
---|
694 | self.addCleanup(http_client.StorageClientFactory.stop_test_mode) |
---|
695 | self.port_assigner = SameProcessStreamEndpointAssigner() |
---|
696 | self.port_assigner.setUp() |
---|
697 | self.addCleanup(self.port_assigner.tearDown) |
---|
698 | |
---|
699 | self.sparent = service.MultiService() |
---|
700 | self.sparent.startService() |
---|
701 | |
---|
702 | def _got_new_http_connection_pool(self, pool): |
---|
703 | # Make sure the pool closes cached connections quickly: |
---|
704 | pool.cachedConnectionTimeout = 0.1 |
---|
705 | # Register the pool for shutdown later: |
---|
706 | self._http_client_pools.append(pool) |
---|
707 | # Disable retries: |
---|
708 | pool.retryAutomatically = False |
---|
709 | # Make a much more aggressive timeout for connections, we're connecting |
---|
710 | # locally after all... and also make sure it's lower than the delay we |
---|
711 | # add in tearDown, to prevent dirty reactor issues. |
---|
712 | getConnection = pool.getConnection |
---|
713 | |
---|
714 | def getConnectionWithTimeout(*args, **kwargs): |
---|
715 | d = getConnection(*args, **kwargs) |
---|
716 | d.addTimeout(1, reactor) |
---|
717 | return d |
---|
718 | |
---|
719 | if self.REDUCE_HTTP_CLIENT_TIMEOUT: |
---|
720 | pool.getConnection = getConnectionWithTimeout |
---|
721 | |
---|
722 | def close_idle_http_connections(self): |
---|
723 | """Close all HTTP client connections that are just hanging around.""" |
---|
724 | return defer.gatherResults( |
---|
725 | [pool.closeCachedConnections() for pool in self._http_client_pools] |
---|
726 | ) |
---|
727 | |
---|
728 | def tearDown(self): |
---|
729 | log.msg("shutting down SystemTest services") |
---|
730 | d = self.sparent.stopService() |
---|
731 | d.addBoth(flush_but_dont_ignore) |
---|
732 | d.addBoth(lambda x: self.close_idle_http_connections().addCallback(lambda _: x)) |
---|
733 | d.addBoth(spin_until_cleanup_done) |
---|
734 | return d |
---|
735 | |
---|
736 | def getdir(self, subdir): |
---|
737 | return os.path.join(self.basedir, subdir) |
---|
738 | |
---|
739 | def add_service(self, s): |
---|
740 | s.setServiceParent(self.sparent) |
---|
741 | return s |
---|
742 | |
---|
743 | def _create_introducer(self): |
---|
744 | """ |
---|
745 | :returns: (via Deferred) an Introducer instance |
---|
746 | """ |
---|
747 | iv_dir = self.getdir("introducer") |
---|
748 | if not os.path.isdir(iv_dir): |
---|
749 | _, web_port_endpoint = self.port_assigner.assign(reactor) |
---|
750 | main_location_hint, main_port_endpoint = self.port_assigner.assign(reactor) |
---|
751 | introducer_config = ( |
---|
752 | u"[node]\n" |
---|
753 | u"nickname = introducer \N{BLACK SMILING FACE}\n" + |
---|
754 | u"web.port = {}\n".format(web_port_endpoint) + |
---|
755 | u"tub.port = {}\n".format(main_port_endpoint) + |
---|
756 | u"tub.location = {}\n".format(main_location_hint) |
---|
757 | ).encode("utf-8") |
---|
758 | |
---|
759 | fileutil.make_dirs(iv_dir) |
---|
760 | fileutil.write( |
---|
761 | os.path.join(iv_dir, 'tahoe.cfg'), |
---|
762 | introducer_config, |
---|
763 | ) |
---|
764 | if SYSTEM_TEST_CERTS: |
---|
765 | os.mkdir(os.path.join(iv_dir, "private")) |
---|
766 | f = open(os.path.join(iv_dir, "private", "node.pem"), "w") |
---|
767 | f.write(SYSTEM_TEST_CERTS[0]) |
---|
768 | f.close() |
---|
769 | return create_introducer(basedir=iv_dir) |
---|
770 | |
---|
771 | def _get_introducer_web(self): |
---|
772 | with open(os.path.join(self.getdir("introducer"), "node.url"), "r") as f: |
---|
773 | return f.read().strip() |
---|
774 | |
---|
775 | @inlineCallbacks |
---|
776 | def set_up_nodes(self, NUMCLIENTS=5): |
---|
777 | """ |
---|
778 | Create an introducer and ``NUMCLIENTS`` client nodes pointed at it. All |
---|
779 | of the nodes are running in this process. |
---|
780 | |
---|
781 | As a side-effect, set: |
---|
782 | |
---|
783 | * ``numclients`` to ``NUMCLIENTS`` |
---|
784 | * ``introducer`` to the ``_IntroducerNode`` instance |
---|
785 | * ``introweb_url`` to the introducer's HTTP API endpoint. |
---|
786 | |
---|
787 | :param int NUMCLIENTS: The number of client nodes to create. |
---|
788 | |
---|
789 | :return: A ``Deferred`` that fires when the nodes have connected to |
---|
790 | each other. |
---|
791 | """ |
---|
792 | self.assertIn( |
---|
793 | self.FORCE_FOOLSCAP_FOR_STORAGE, (True, False), |
---|
794 | "You forgot to set FORCE_FOOLSCAP_FOR_STORAGE on {}".format(self.__class__) |
---|
795 | ) |
---|
796 | self.numclients = NUMCLIENTS |
---|
797 | |
---|
798 | self.introducer = yield self._create_introducer() |
---|
799 | self.add_service(self.introducer) |
---|
800 | self.introweb_url = self._get_introducer_web() |
---|
801 | yield self._set_up_client_nodes(self.FORCE_FOOLSCAP_FOR_STORAGE) |
---|
802 | native_server = next(iter(self.clients[0].storage_broker.get_known_servers())) |
---|
803 | if self.FORCE_FOOLSCAP_FOR_STORAGE: |
---|
804 | expected_storage_server_class = NativeStorageServer |
---|
805 | else: |
---|
806 | expected_storage_server_class = HTTPNativeStorageServer |
---|
807 | self.assertIsInstance(native_server, expected_storage_server_class) |
---|
808 | |
---|
809 | @inlineCallbacks |
---|
810 | def _set_up_client_nodes(self, force_foolscap): |
---|
811 | q = self.introducer |
---|
812 | self.introducer_furl = q.introducer_url |
---|
813 | self.clients = [] |
---|
814 | basedirs = [] |
---|
815 | for i in range(self.numclients): |
---|
816 | basedirs.append((yield self._set_up_client_node(i, force_foolscap))) |
---|
817 | |
---|
818 | # start clients[0], wait for it's tub to be ready (at which point it |
---|
819 | # will have registered the helper furl). |
---|
820 | c = yield client.create_client(basedirs[0]) |
---|
821 | c.setServiceParent(self.sparent) |
---|
822 | self.clients.append(c) |
---|
823 | |
---|
824 | with open(os.path.join(basedirs[0],"private","helper.furl"), "r") as f: |
---|
825 | helper_furl = f.read() |
---|
826 | |
---|
827 | self.helper_furl = helper_furl |
---|
828 | if self.numclients >= 2: |
---|
829 | with open(os.path.join(basedirs[1], 'tahoe.cfg'), 'a+') as f: |
---|
830 | f.write( |
---|
831 | "[client]\n" |
---|
832 | "helper.furl = {}\n".format(helper_furl) |
---|
833 | ) |
---|
834 | |
---|
835 | # this starts the rest of the clients |
---|
836 | for i in range(1, self.numclients): |
---|
837 | c = yield client.create_client(basedirs[i]) |
---|
838 | c.setServiceParent(self.sparent) |
---|
839 | self.clients.append(c) |
---|
840 | log.msg("STARTING") |
---|
841 | yield self.wait_for_connections() |
---|
842 | log.msg("CONNECTED") |
---|
843 | # now find out where the web port was |
---|
844 | self.webish_url = self.clients[0].getServiceNamed("webish").getURL() |
---|
845 | if self.numclients >=2: |
---|
846 | # and the helper-using webport |
---|
847 | self.helper_webish_url = self.clients[1].getServiceNamed("webish").getURL() |
---|
848 | |
---|
849 | def _generate_config(self, which, basedir, force_foolscap=False): |
---|
850 | config = {} |
---|
851 | |
---|
852 | allclients = set(range(self.numclients)) |
---|
853 | except1 = allclients - {1} |
---|
854 | feature_matrix = { |
---|
855 | ("client", "nickname"): except1, |
---|
856 | |
---|
857 | # Auto-assigning addresses is extremely failure prone and not |
---|
858 | # amenable to automated testing in _this_ manner. |
---|
859 | ("node", "tub.port"): allclients, |
---|
860 | ("node", "tub.location"): allclients, |
---|
861 | |
---|
862 | # client 0 runs a webserver and a helper |
---|
863 | # client 1 runs a webserver but no helper |
---|
864 | ("node", "web.port"): {0, 1}, |
---|
865 | ("node", "timeout.keepalive"): {0}, |
---|
866 | ("node", "timeout.disconnect"): {1}, |
---|
867 | |
---|
868 | ("helper", "enabled"): {0}, |
---|
869 | } |
---|
870 | |
---|
871 | def setconf(config, which, section, feature, value): |
---|
872 | if which in feature_matrix.get((section, feature), {which}): |
---|
873 | config.setdefault(section, {})[feature] = value |
---|
874 | |
---|
875 | setnode = partial(setconf, config, which, "node") |
---|
876 | sethelper = partial(setconf, config, which, "helper") |
---|
877 | |
---|
878 | setnode("nickname", u"client %d \N{BLACK SMILING FACE}" % (which,)) |
---|
879 | setconf(config, which, "storage", "force_foolscap", str(force_foolscap)) |
---|
880 | setconf(config, which, "client", "force_foolscap", str(force_foolscap)) |
---|
881 | |
---|
882 | tub_location_hint, tub_port_endpoint = self.port_assigner.assign(reactor) |
---|
883 | setnode("tub.port", tub_port_endpoint) |
---|
884 | setnode("tub.location", tub_location_hint) |
---|
885 | |
---|
886 | _, web_port_endpoint = self.port_assigner.assign(reactor) |
---|
887 | setnode("web.port", web_port_endpoint) |
---|
888 | setnode("timeout.keepalive", "600") |
---|
889 | setnode("timeout.disconnect", "1800") |
---|
890 | |
---|
891 | sethelper("enabled", "True") |
---|
892 | |
---|
893 | iyaml = ("introducers:\n" |
---|
894 | " petname2:\n" |
---|
895 | " furl: %s\n") % self.introducer_furl |
---|
896 | iyaml_fn = os.path.join(basedir, "private", "introducers.yaml") |
---|
897 | fileutil.write(iyaml_fn, iyaml) |
---|
898 | return _render_config(config) |
---|
899 | |
---|
900 | def _set_up_client_node(self, which, force_foolscap): |
---|
901 | basedir = self.getdir("client%d" % (which,)) |
---|
902 | fileutil.make_dirs(os.path.join(basedir, "private")) |
---|
903 | if len(SYSTEM_TEST_CERTS) > (which + 1): |
---|
904 | f = open(os.path.join(basedir, "private", "node.pem"), "w") |
---|
905 | f.write(SYSTEM_TEST_CERTS[which + 1]) |
---|
906 | f.close() |
---|
907 | config = self._generate_config(which, basedir, force_foolscap) |
---|
908 | fileutil.write(os.path.join(basedir, 'tahoe.cfg'), config) |
---|
909 | return basedir |
---|
910 | |
---|
911 | def bounce_client(self, num): |
---|
912 | c = self.clients[num] |
---|
913 | d = c.disownServiceParent() |
---|
914 | # I think windows requires a moment to let the connection really stop |
---|
915 | # and the port number made available for re-use. TODO: examine the |
---|
916 | # behavior, see if this is really the problem, see if we can do |
---|
917 | # better than blindly waiting for a second. |
---|
918 | d.addCallback(self.stall, 1.0) |
---|
919 | |
---|
920 | @defer.inlineCallbacks |
---|
921 | def _stopped(res): |
---|
922 | new_c = yield client.create_client(self.getdir("client%d" % num)) |
---|
923 | self.clients[num] = new_c |
---|
924 | new_c.setServiceParent(self.sparent) |
---|
925 | d.addCallback(_stopped) |
---|
926 | d.addCallback(lambda res: self.wait_for_connections()) |
---|
927 | def _maybe_get_webport(res): |
---|
928 | if num == 0: |
---|
929 | # now find out where the web port was |
---|
930 | self.webish_url = self.clients[0].getServiceNamed("webish").getURL() |
---|
931 | d.addCallback(_maybe_get_webport) |
---|
932 | return d |
---|
933 | |
---|
934 | @defer.inlineCallbacks |
---|
935 | def add_extra_node(self, client_num, helper_furl=None, |
---|
936 | add_to_sparent=False): |
---|
937 | # usually this node is *not* parented to our self.sparent, so we can |
---|
938 | # shut it down separately from the rest, to exercise the |
---|
939 | # connection-lost code |
---|
940 | basedir = FilePath(self.getdir("client%d" % client_num)) |
---|
941 | basedir.makedirs() |
---|
942 | config = ( |
---|
943 | "[node]\n" |
---|
944 | "tub.location = {}\n" |
---|
945 | "tub.port = {}\n" |
---|
946 | "[client]\n" |
---|
947 | ).format(*self.port_assigner.assign(reactor)) |
---|
948 | |
---|
949 | if helper_furl: |
---|
950 | config += "helper.furl = %s\n" % helper_furl |
---|
951 | basedir.child("tahoe.cfg").setContent(config.encode("utf-8")) |
---|
952 | private = basedir.child("private") |
---|
953 | private.makedirs() |
---|
954 | write_introducer( |
---|
955 | basedir, |
---|
956 | "default", |
---|
957 | self.introducer_furl, |
---|
958 | ) |
---|
959 | |
---|
960 | c = yield client.create_client(basedir.path) |
---|
961 | self.clients.append(c) |
---|
962 | self.numclients += 1 |
---|
963 | if add_to_sparent: |
---|
964 | c.setServiceParent(self.sparent) |
---|
965 | else: |
---|
966 | c.startService() |
---|
967 | yield self.wait_for_connections() |
---|
968 | defer.returnValue(c) |
---|
969 | |
---|
970 | def _check_connections(self): |
---|
971 | for i, c in enumerate(self.clients): |
---|
972 | if not c.connected_to_introducer(): |
---|
973 | log.msg("%s not connected to introducer yet" % (i,)) |
---|
974 | return False |
---|
975 | sb = c.get_storage_broker() |
---|
976 | connected_servers = sb.get_connected_servers() |
---|
977 | connected_names = sorted(list( |
---|
978 | connected.get_nickname() |
---|
979 | for connected |
---|
980 | in sb.get_known_servers() |
---|
981 | if connected.is_connected() |
---|
982 | )) |
---|
983 | if len(connected_servers) != self.numclients: |
---|
984 | wanted = sorted(list( |
---|
985 | client.nickname |
---|
986 | for client |
---|
987 | in self.clients |
---|
988 | )) |
---|
989 | log.msg( |
---|
990 | "client %s storage broker connected to %s, missing %s" % ( |
---|
991 | i, |
---|
992 | connected_names, |
---|
993 | set(wanted) - set(connected_names), |
---|
994 | ) |
---|
995 | ) |
---|
996 | return False |
---|
997 | log.msg("client %s storage broker connected to %s, happy" % ( |
---|
998 | i, connected_names, |
---|
999 | )) |
---|
1000 | up = c.getServiceNamed("uploader") |
---|
1001 | if up._helper_furl and not up._helper: |
---|
1002 | log.msg("Helper fURL but no helper") |
---|
1003 | return False |
---|
1004 | return True |
---|
1005 | |
---|
1006 | def wait_for_connections(self, ignored=None): |
---|
1007 | return self.poll(self._check_connections, timeout=200) |
---|