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

इस सेक्शन को समझने के लिए, पहले ट्रेडfed @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 (जीसीएस) बकेट में मौजूद उस फ़ाइल पर ले जाता है जहां वह सेव की गई है. वह रिमोट पाथ देखकर, फ़ाइल को स्थानीय तौर पर डाउनलोड करने की कोशिश करेगा और उसे @Option को असाइन करेगा. इससे, mConfigFile वैरिएबल अब फ़ाइल के स्थानीय वर्शन पर ले जाता है. इसका इस्तेमाल टेस्ट में किया जा सकता है.

अगर रिमोट फ़ाइल को किसी भी वजह से डाउनलोड नहीं किया जा सकता, तो Trefed एक 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://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 फ़ाइल में जोड़ा जा सकता है, ताकि सहायता को आधिकारिक तौर पर चालू किया जा सके.