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

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

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

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

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

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

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

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

या कमांड के ज़रिए सेट किया जा सकता है:

--config-file /tmp/file

ब्यौरा

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

इसके लिए, फ़ाइल को रिमोट स्टाइल पाथ के साथ तय करना ज़रूरी है. उदाहरण के लिए:

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

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

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

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

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

दो इन-बिल्ट बिहेवियर उपलब्ध हैं:

  • unzip: अगर इसे true पर सेट किया जाता है और डाउनलोड की गई फ़ाइल zip है, तो वह अपने-आप किसी अस्थायी जगह पर अनज़िप हो जाएगी. उदाहरण: ?unzip=true
  • optional: डिफ़ॉल्ट रूप से 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के ज़रिए मैच किया जाएगा. उदाहरण के लिए, Google Cloud Storage प्रोटोकॉल के लिए gs का इस्तेमाल किया जाता है. लागू करने के लिए, #resolveRemoteFiles(RemoteFileResolverArgs) इंटरफ़ेस का सुझाव दिया जाता है. इसे लंबे समय तक बनाए रखा जाएगा.

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