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

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

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

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

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

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

  • unzip: अगर इसे 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 का रिज़ॉल्यूशन सिर्फ़ मुख्य XML Tradefed कॉन्फ़िगरेशन के लिए चालू है.

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

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

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

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