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

इस अनुभाग को समझने के लिए, पहले ट्रेडफेड @ऑप्शन का अध्ययन करें।

ट्रेडफेड में विशिष्ट विकल्प परीक्षण कक्षाओं को XML कॉन्फ़िगरेशन या कमांड लाइन से अतिरिक्त जानकारी प्राप्त करने की अनुमति देते हैं। यह सुविधा आपको एक अतिरिक्त कदम उठाने और यदि आवश्यक हो तो इस अतिरिक्त जानकारी में से कुछ को हल करने की अनुमति देती है।

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

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

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

उपरोक्त को XML कॉन्फ़िगरेशन के माध्यम से सेट किया जा सकता है:

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

या आदेश के माध्यम से:

--config-file /tmp/file

विवरण

यह सुविधा आपको फ़ाइल-टाइप किए गए @Options को हल करने की अनुमति देती है जो उपयोगकर्ता के दृष्टिकोण से निर्बाध रूप से उपलब्ध होने के लिए एक स्थानीय फ़ाइल में दूरस्थ हैं।

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

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

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

यदि किसी कारण से दूरस्थ फ़ाइल डाउनलोड नहीं की जा सकती है, तो ट्रेडफेड एक ConfigurationException फेंक देगा जो परीक्षण को चलने से रोक देगा। हम उन फ़ाइलों के गायब होने को एक गंभीर विफलता मानते हैं क्योंकि कुछ परीक्षण कलाकृतियाँ भी गायब होंगी।

क्वेरी पैरामीटर का उपयोग करें

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

दो अंतर्निहित व्यवहार उपलब्ध हैं:

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

आप --dynamic-download-args key=value के माध्यम से वैश्विक क्वेरी तर्क भी पास कर सकते हैं जो आमंत्रण में प्रयास किए गए सभी डायनामिक डाउनलोड के लिए कुंजी/मान पास कर देगा।

समर्थित प्रोटोकॉल

आधिकारिक तौर पर समर्थित प्रोटोकॉल और उनके संबंधित प्रारूप हैं:

  • Google क्लाउड स्टोरेज, प्रोटोकॉल: gs , प्रारूप: gs://<bucket name>/path
  • स्थानीय फ़ाइलें, प्रोटोकॉल: file , प्रारूप: file:/local/path
  • http लिंक, प्रोटोकॉल: http , प्रारूप: http://url
  • https लिंक, प्रोटोकॉल: https , प्रारूप: https://url

सीमाएँ

@Option का डायनामिक रिज़ॉल्यूशन वर्तमान में डाउनलोड करने के लिए केवल सीमित संख्या में प्रोटोकॉल और स्थानों का समर्थन करता है। @Option का रिज़ॉल्यूशन वर्तमान में केवल मुख्य XML ट्रेडफेड कॉन्फ़िगरेशन के लिए सक्षम है।

यदि सुइट के रूप में चल रहा है, तो वर्तमान मॉड्यूल ( AndroidTest.xml ) डिफ़ॉल्ट रूप से फ़ाइलों का समाधान नहीं करेगा। इसका उद्देश्य मॉड्यूल को कुछ अज्ञात निर्भरताएँ बनाने से रोकना है । सुइट स्तर पर --enable-module-dynamic-download उपयोग करके इससे बचा जा सकता है, लेकिन संगतता परीक्षण सुइट (सीटीएस) और विक्रेता परीक्षण सुइट (वीटीएस) जैसे प्रमुख सुइट इसे सक्षम नहीं करेंगे।

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

जो प्रोटोकॉल समर्थित हैं, उनमें IRemoteFileResolver इंटरफ़ेस का ट्रेडफेड में कार्यान्वयन है, जो प्रोटोकॉल के संक्षिप्त टैग को परिभाषित करता है जिसे getSupportedProtocol के माध्यम से फ़ाइल पथ में मिलान किया जाएगा। उदाहरण के लिए, gs उपयोग Google क्लाउड स्टोरेज प्रोटोकॉल के लिए किया जाता है। लागू करने के लिए अनुशंसित इंटरफ़ेस #resolveRemoteFiles(RemoteFileResolverArgs) है जो दीर्घकालिक अनुरक्षित इंटरफ़ेस होगा।

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