ग्लोबल कॉन्फ़िगरेशन के साथ प्रोटोकॉल लोड करना

इस सेक्शन को समझने के लिए, पहले Tradefed के @Option के बारे में जानें.

Tradefed में मौजूद सामान्य विकल्पों की मदद से, टेस्ट क्लास को एक्सएमएल कॉन्फ़िगरेशन या कमांड लाइन से ज़्यादा जानकारी मिल सकती है. इस सुविधा की मदद से, ज़रूरत पड़ने पर, कुछ अतिरिक्त जानकारी को ठीक किया जा सकता है.

फ़ाइल के विकल्प का उदाहरण

फ़ाइल का उदाहरण @option:

@Option(name = 'config-file')
private File mConfigFile;

ऊपर दी गई जानकारी को एक्सएमएल कॉन्फ़िगरेशन की मदद से सेट किया जा सकता है:

<option name="config-file" value="/tmp/file" />

या कमांड के ज़रिए:

--config-file /tmp/file

ब्यौरा

इस सुविधा की मदद से, फ़ाइल टाइप के @Options को रिमोट से लोकल फ़ाइल में बदला जा सकता है, ताकि उपयोगकर्ता आसानी से उनका इस्तेमाल कर सके.

इसके काम करने के लिए, फ़ाइल को रिमोट स्टाइल पाथ के साथ डालना होगा. उदाहरण के लिए:

--config-file gs://bucket/tmp/file

यह पाथ, Google Cloud Storage (जीसीएस) बकेट में मौजूद उस फ़ाइल पर ले जाता है जहां वह सेव की गई है. रिमोट पाथ को देखकर, Tradefed फ़ाइल को स्थानीय तौर पर डाउनलोड करने की कोशिश करेगा और उसे @Option को असाइन कर देगा. इससे, mConfigFile वैरिएबल अब फ़ाइल के स्थानीय वर्शन पर ले जाता है. इसका इस्तेमाल टेस्ट में किया जा सकता है.

अगर किसी वजह से रिमोट फ़ाइल डाउनलोड नहीं हो पाती है, तो Tradefed एक ConfigurationException दिखाएगा. इसकी वजह से, टेस्ट नहीं चलेगा. हम उन फ़ाइलों के मौजूद न होने को एक गंभीर समस्या मानते हैं, क्योंकि कुछ टेस्ट आर्टफ़ैक्ट भी मौजूद नहीं होंगे.

क्वेरी पैरामीटर का इस्तेमाल करना

? का इस्तेमाल करके, यूआरएल में क्वेरी पैरामीटर जोड़े जा सकते हैं. उदाहरण के लिए, gs://bucket/path?unzip=true. कुंजी/वैल्यू unzip=true, IRemoteFileResolver इंटरफ़ेस के लागू होने पर उपलब्ध होगी.

पहले से मौजूद दो तरह के व्यवहार उपलब्ध हैं:

  • अनज़िप करें: अगर इसे true पर सेट किया गया है और डाउनलोड की गई फ़ाइल ज़िप है, तो उसे कुछ समय के लिए सेव की गई जगह पर अपने-आप अनज़िप कर दिया जाएगा. उदाहरण: ?unzip=true
  • ज़रूरी नहीं: डिफ़ॉल्ट रूप से false पर सेट होता है. अगर इसे true पर सेट किया जाता है और रिज़ॉल्यूशन पूरा नहीं होता, तो कोई अपवाद नहीं दिखेगा. साथ ही, फ़ाइल को बदला नहीं जाएगा. उदाहरण: ?optional=true

--dynamic-download-args key=value के ज़रिए ग्लोबल क्वेरी आर्ग्युमेंट भी पास किए जा सकते हैं. इससे, कॉल करने के दौरान किए गए सभी डाइनैमिक डाउनलोड में कुंजी/वैल्यू पास हो जाएगी.

साथ काम करने वाले प्रोटोकॉल

आधिकारिक तौर पर काम करने वाले प्रोटोकॉल और उनके फ़ॉर्मैट ये हैं:

  • Google Cloud Storage, प्रोटोकॉल: gs, फ़ॉर्मैट: gs://<bucket name>/path
  • लोकल फ़ाइलें, प्रोटोकॉल: file, फ़ॉर्मैट: file:/local/path
  • http लिंक, प्रोटोकॉल: http, फ़ॉर्मैट: http://url
  • https लिंक, प्रोटोकॉल: https, फ़ॉर्मैट: https://url

सीमाएं

फ़िलहाल, @Option के डाइनैमिक रिज़ॉल्यूशन की सुविधा, सिर्फ़ कुछ प्रोटोकॉल और जगहों से डाउनलोड करने के लिए उपलब्ध है. फ़िलहाल, @Option का रिज़ॉल्यूशन सिर्फ़ मुख्य एक्सएमएल Tradefed कॉन्फ़िगरेशन के लिए चालू है.

अगर इसे सुइट के तौर पर चलाया जा रहा है, तो मौजूदा मॉड्यूल (AndroidTest.xml) डिफ़ॉल्ट रूप से फ़ाइलों को हल नहीं करेंगे. इसका मकसद, मॉड्यूल को कुछ अनजान डिपेंडेंसी बनाने से रोकना है. सुइट लेवल पर --enable-module-dynamic-download का इस्तेमाल करके, इस एस्केप को हटाया जा सकता है. हालांकि, Compatibility Test Suite (CTS) और Vendor Test Suite (VTS) जैसे मुख्य सुइट में यह सुविधा चालू नहीं होगी.

नया प्रोटोकॉल लागू करना

काम करने वाले प्रोटोकॉल के लिए, Tradefed में IRemoteFileResolver इंटरफ़ेस को लागू किया गया है. यह प्रोटोकॉल के उस शॉर्ट टैग के बारे में बताता है जिसे getSupportedProtocol की मदद से फ़ाइल पाथ में मैच किया जाएगा. उदाहरण के लिए, gs का इस्तेमाल Google Cloud Storage प्रोटोकॉल के लिए किया जाता है. लागू करने के लिए सुझाया गया इंटरफ़ेस #resolveRemoteFiles(RemoteFileResolverArgs) है. इसे लंबे समय तक इस्तेमाल किया जाएगा.

लागू किए गए प्रोटोकॉल को harness META-INF services फ़ाइल में जोड़ा जा सकता है, ताकि सहायता को आधिकारिक तौर पर चालू किया जा सके.