टेस्ट करने के एनवायरमेंट की पूरी जानकारी.
बैकग्राउंड
Bazel BUILD भाषा में ऐसे नियम शामिल हैं जिनका उपयोग कई भाषाओं में स्वचालित टेस्ट प्रोग्राम को परिभाषित करने के लिए किया जा सकता है.
टेस्ट bazel test
का इस्तेमाल करके किए जाते हैं.
उपयोगकर्ता सीधे टेस्ट बाइनरी भी इस्तेमाल कर सकते हैं. इसकी अनुमति है, लेकिन प्रमोशन नहीं किया जाता है, क्योंकि शुरू करने का तरीका, नीचे बताए गए मैंडेट का पालन नहीं करेगा.
टेस्ट बिना किसी क्रम के होने चाहिए: इसका मतलब है कि उन्हें सिर्फ़ वे रिसॉर्स ऐक्सेस करने चाहिए जिन पर उनका डिपेंडेंसी निर्भर होता है. अगर जांच के तरीके ठीक से नहीं हैं, तो वे लंबे समय तक चलने वाले नतीजे नहीं देते. यह गड़बड़ी खोजने (यह तय करने के लिए जो बदलाव टेस्ट को नुकसान पहुंचा रहा है), रिलीज़ इंजीनियरिंग ऑडिटेबिलिटी और टेस्ट आइसोलेशन (अपने-आप होने वाले टेस्टिंग फ़्रेमवर्क) को डीडीओएस सर्वर नहीं चाहिए, क्योंकि कुछ जांच इसकी वजह से होती है; यह एक गंभीर समस्या हो सकती है.
मकसद
इस पेज का मकसद है आधिकारिक तौर पर बेज़ल टेस्ट के लिए रनटाइम एनवायरमेंट सेट करना और लोगों की उम्मीद के मुताबिक काम करना. यह टेस्ट रनर और बिल्ड सिस्टम पर भी ज़रूरी शर्तें लागू करेगा.
टेस्ट एनवायरमेंट की खास जानकारी की मदद से, टेस्ट के लेखकों को उनके काम करने के तरीके पर भरोसा करने से बचा जा सकता है. इस तरह, टेस्ट इंफ़्रास्ट्रक्चर को लागू करने के तरीके में बदलाव करने की पूरी आज़ादी मिलती है. इस स्पेसिफ़िकेशन में कुछ कमियां हैं, जो समय-समय पर, खोज और जानकारी को सही तरीके से फ़िल्टर न करने के बावजूद, कई टेस्ट पास करने की अनुमति देती हैं.
इस पेज का मकसद भरोसेमंद और आधिकारिक, दोनों होना है. अगर स्पेसिफ़िकेशन की यह प्रक्रिया और टेस्ट रनर का लागू किया गया तरीका असहमत है, तो इस खासियत को प्राथमिकता दी जाती है.
प्रस्तावित विवरण
आईईटीएफ़ RFC 2119 के अनुसार, "मुख्य", "ज़रूरी", "ज़रूरी", "ज़रूरी", "शामिल नहीं", "होना चाहिए", "होना चाहिए", "सुझाया गया", "माया" और "ज़रूरी नहीं" होना चाहिए.
जांच करने का मकसद
Bazel की जांच का मकसद, सोर्स फ़ाइलों की कुछ प्रॉपर्टी की पुष्टि करना है, जो रिपॉज़िटरी में सही का निशान लगाकर चुनी गई है. (इस पेज पर, "स्रोत फ़ाइलें" में टेस्ट डेटा, गोल्डन आउटपुट, और वर्शन कंट्रोल के तहत आने वाली बाकी चीज़ें शामिल हैं.) एक उपयोगकर्ता एक इन्वैरिएंट पर दावा करने के लिए एक टेस्ट लिखता है, जिसे वे बरकरार रखने की उम्मीद करते हैं. दूसरे उपयोगकर्ता बाद में टेस्ट करते हैं, ताकि यह पता चल सके कि इन्फ़ॉर्मैट का इस्तेमाल तो नहीं किया गया. (अगर टेस्ट, सोर्स फ़ाइल (बिना हेरमेटिक) के अलावा किसी भी वैरिएबल पर निर्भर होता है, तो इसकी वैल्यू कम हो जाती है. ऐसा इसलिए, क्योंकि बाद में उपयोगकर्ताओं को यह पक्का नहीं हो सकता कि टेस्ट में पास होने से पहले उनके बदलाव गलती से हो गए.
इसलिए, जांच का नतीजा सिर्फ़ इस पर निर्भर करता है:
- ऐसी सोर्स फ़ाइलें जिन पर टेस्ट के लिए एक डिपेंडेंसी इस्तेमाल की जाती है
- बिल्ड सिस्टम के वे प्रॉडक्ट जिनके लिए टेस्ट के बारे में साफ़ तौर पर बताया गया है
- ऐसे रिसॉर्स जिनके व्यवहार की जांच, टेस्ट रनर के स्थायी होने की गारंटी होती है
फ़िलहाल, ऐसा व्यवहार लागू नहीं किया गया है. हालांकि, जांच करने वाले लोगों के पास आने वाले समय में, इस तरह के नीति उल्लंघन ठीक करने के तरीके (एनफ़ोर्समेंट) को जोड़ने का अधिकार होता है.
बिल्ड सिस्टम की भूमिका
टेस्ट के नियम, बाइनरी नियमों से मिलते-जुलते हैं, जिनमें हर एक को एक्ज़ीक्यूटेबल प्रोग्राम होना चाहिए. कुछ भाषाओं के लिए, यह स्टब प्रोग्राम है, जिसमें खास तौर पर भाषा से जुड़े नियमों का इस्तेमाल किया जाता है. टेस्ट नियमों को दूसरे आउटपुट भी बनाने चाहिए. प्राथमिक जांच के एक्ज़ीक्यूटेबल के अलावा, टेस्ट रनर को runfiles के मेनिफ़ेस्ट की ज़रूरत होगी. यह ज़रूरी है कि रनटाइम के दौरान इनपुट वाली फ़ाइलें उपलब्ध कराई जाएं और उन्हें टेस्ट के टाइप, साइज़, और टैग की जानकारी मिले.
बिल्ड सिस्टम, कोड के साथ-साथ डेटा डिलीवर करने के लिए रनफ़ाइल का इस्तेमाल कर सकता है. (इसका इस्तेमाल हर जांच की बाइनरी को छोटा करने के लिए, ऑप्टिमाइज़ेशन के तौर पर किया जा सकता है. इसके लिए, जांच के दौरान फ़ाइलें शेयर करनी होंगी, जैसे कि डाइनैमिक लिंकिंग का इस्तेमाल करना.) बिल्ड सिस्टम को यह पक्का करना चाहिए कि जनरेट की गई फ़ाइल एक्ज़ीक्यूट करने पर उपलब्ध टेस्ट फ़ाइल से मिली रनफ़ाइल इमेज के ज़रिए, इन फ़ाइलों को लोड करे. इसके बजाय, मूल या आउटपुट ट्री में मौजूद जगह की सटीक जानकारी को हार्डकोड करें.
टेस्ट रनर की भूमिका
टेस्ट रनर के हिसाब से, हर टेस्ट एक ऐसा प्रोग्राम है जिसे
execve()
के साथ जोड़ा जा सकता है. जांच करने के दूसरे तरीके भी हो सकते हैं. उदाहरण के लिए, हो सकता है कि किसी आईडीई की वजह से Java की जांच के दौरान भी प्रोसेस चल सके. हालांकि, स्टैंडअलोन प्रोसेस के तौर पर टेस्ट चलाने के बाद, आधिकारिक नतीजा माना जाता है. टेस्ट
की प्रक्रिया पूरी होने पर, वह आम तौर पर शून्य और एग्ज़िट कोड के साथ खत्म हो जाती है. किसी भी अन्य नतीजे की जांच को असफल माना जाता है. खास तौर पर, PASS
.FAIL
या stdout में कोई भी स्ट्रिंग लिखने से,
टेस्ट रनर पर कोई असर नहीं पड़ता है.
अगर टेस्ट करने में ज़्यादा समय लगता है, तो कुछ संसाधनों की सीमा पार हो जाती है या टेस्ट करने वाले को प्रतिबंधित व्यवहार का पता चलता है, तो वह टेस्ट को मार सकता है और रनिंग को असफल मान सकता है. रनर को, टेस्ट की प्रक्रिया या उसके किसी सिग्नल को सिग्नल भेजने के बाद, टेस्ट पास होने की शिकायत नहीं करनी चाहिए.
पूरे टेस्ट टारगेट (अलग-अलग तरीकों या टेस्ट) को पूरा होने में तय समय दिया जाता है. टेस्ट के लिए समयसीमा,
timeout
एट्रिब्यूट के हिसाब से दी गई है. यह इस टेबल पर आधारित है:
टाइम आउट | समयसीमा (सेकंड में) |
---|---|
छोटा | 60 |
मध्यम | 300 |
लंबा | 900 |
शाश्वत | 3,600 |
टेस्ट के लिए, टाइम आउट की जानकारी साफ़ तौर पर नहीं दी गई होती है. इनमें, टेस्ट के size
के हिसाब से, टाइम आउट शामिल किया गया है:
साइज़ | शामिल होने का टाइम आउट लेबल |
---|---|
छोटा | छोटा |
मीडियम | मध्यम |
बड़ा | लंबा |
विशाल | शाश्वत |
"बड़ा" टेस्ट के साथ 900 सेकंड की समयसीमा तय करने के लिए, कोई भी टाइम आउट सेट नहीं किया जाएगा. "छोटा" करने के टाइम आउट के साथ, "माध्यम" की जांच को 60 सेकंड दिया जाएगा.
timeout
के उलट, size
स्थानीय तौर पर टेस्ट करते समय, अन्य संसाधनों (जैसे कि रैम) के सबसे ज़्यादा इस्तेमाल का पता लगाता है, जैसा कि आम परिभाषाओं में बताया गया है.
size
और timeout
लेबल के सभी कॉम्बिनेशन कानूनी हैं, इसलिए हो सकता है कि "बहुत बड़ा" टेस्ट के लिए टाइम आउट का समय "छोटा" हो. मुमकिन है कि यह कुछ बहुत ही अजीबोगरीब तरीके से काम करे.
जांच करने का समय तय करने की सीमा पर ध्यान दिए बिना, आर्बिट्ररी मोड में वापस जा सकते हैं. ज़्यादा समय तक टाइम आउट करने की वजह से, टेस्ट में जुर्माना नहीं लगाया जाता है. हालांकि, चेतावनी जारी की जा सकती है: आम तौर पर, आपको टाइम आउट की अवधि को जितना हो सके उतना कम सेट करना चाहिए, ताकि कोई परेशानी न हो.
टेस्ट टाइम आउट को --test_timeout
बैजल फ़्लैग से बदला जा सकता है. ऐसा तब होता है,
जब मैन्युअल तरीके से धीमे लोड होने वाली स्थितियों में मैन्युअल तौर पर इसे चलाया जाता है. --test_timeout
की वैल्यू, सेकंड में है. उदाहरण के लिए, --test_timeout=120
जांच का समय खत्म होने का समय, दो मिनट पर सेट करता है.
टेस्ट के टाइम आउट के लिए, यहां सुझाव भी दिया गया है:
टाइम आउट | कम से कम समय (सेकंड में) |
---|---|
छोटा | 0 |
मध्यम | 30 |
लंबा | 300 |
शाश्वत | 900 |
उदाहरण के लिए, अगर "मॉडरेट" टेस्ट 5.5 सेकंड में पूरा होता है, तो timeout =
"short"
या size = "small"
सेट करें. बैज --test_verbose_timeout_warnings
का कमांड लाइन विकल्प इस्तेमाल करने पर, वे टेस्ट दिखेंगे जिनमें तय किया गया साइज़ बहुत बड़ा है.
टेस्ट साइज़ और टाइम आउट की जानकारी, BUILD फ़ाइल में यहां दी गई जानकारी के हिसाब से दी जाती है. अगर कोई वैल्यू तय नहीं की गई है, तो टेस्ट का साइज़ डिफ़ॉल्ट रूप से "मीडियम" होगा.
अगर टेस्ट मुख्य प्रक्रिया से बाहर निकल जाता है, लेकिन उसके कुछ बच्चे अब भी चल रहे हैं, तो टेस्ट रनर को इसे पूरा मान लेना चाहिए. इसके अलावा, मुख्य प्रक्रिया में पाए गए एग्ज़िट कोड के आधार पर उसकी गिनती असफलता के तौर पर होनी चाहिए. टेस्ट रनर किसी भी आवारा प्रक्रिया को मार सकता है. टेस्ट को इस तरीके से प्रोसेस को लीक नहीं करना चाहिए.
शैर्डिंग टेस्ट करें
टेस्ट शार्डिंग के ज़रिए टेस्ट को एक साथ रोका जा सकता है. टेस्ट शार्डिंग चालू करने के लिए, --test_sharding_strategy
और shard_count
देखें. शार्डिंग चालू होने पर, एक बार शार्ड चलाने के बाद टेस्ट रनर
को लॉन्च किया जाता है. एनवायरमेंट वैरिएबल TEST_TOTAL_SHARDS
, शार्ड की संख्या है और TEST_SHARD_INDEX
शार्ड इंडेक्स है. इसकी शुरुआत 0 से होती है. दौड़ना पसंद करने वाले लोग इस जानकारी का इस्तेमाल, यह चुनने के लिए करते हैं कि कौनसे टेस्ट चलाने हैं. उदाहरण के लिए, राउंड-रॉबिन रणनीति का इस्तेमाल करना. दौड़ने वाले सभी लोग
शार्डिंग का समर्थन नहीं करते. अगर कोई धावक शार्डिंग के साथ काम करता है, तो उसे TEST_SHARD_STATUS_FILE
में बताई गई फ़ाइल की आखिरी बार बदलाव की तारीख बनानी या अपडेट करनी होगी. अगर
--incompatible_check_sharding_support
को चालू किया जाता है, तो बज़ेल के शार्ड होने पर, वह टेस्ट में फ़ेल हो जाएगा.
शुरुआती शर्तें
टेस्ट रन करते समय, टेस्ट करने वाले को कुछ शुरुआती शर्तें लागू करनी होंगी.
टेस्ट रनर को
argv[0]
में टेस्ट एक्ज़ीक्यूटेबल के पाथ के साथ, हर टेस्ट को शुरू करना होगा. यह पाथ, टेस्ट की मौजूदा डायरेक्ट्री के रिलेटिव और नीचे होना चाहिए
(जो रनफ़ाइल ट्री में है, नीचे देखें). जब तक उपयोगकर्ता साफ़ तौर पर अनुरोध न करे, तब तक टेस्ट रनर
को टेस्ट के लिए कोई अन्य तर्क पास नहीं करना चाहिए.
शुरुआती एनवायरमेंट ब्लॉक इस तरह से बना होगा:
वैरिएबल | वैल्यू | स्थिति |
---|---|---|
HOME |
$TEST_TMPDIR की वैल्यू |
सुझाया गया |
LANG |
सेट नहीं है | इसे भरना ज़रूरी है |
LANGUAGE |
सेट नहीं है | इसे भरना ज़रूरी है |
LC_ALL |
सेट नहीं है | इसे भरना ज़रूरी है |
LC_COLLATE |
सेट नहीं है | इसे भरना ज़रूरी है |
LC_CTYPE |
सेट नहीं है | इसे भरना ज़रूरी है |
LC_MESSAGES |
सेट नहीं है | इसे भरना ज़रूरी है |
LC_MONETARY |
सेट नहीं है | इसे भरना ज़रूरी है |
LC_NUMERIC |
सेट नहीं है | इसे भरना ज़रूरी है |
LC_TIME |
सेट नहीं है | इसे भरना ज़रूरी है |
LD_LIBRARY_PATH |
शेयर की गई लाइब्रेरी वाली डायरेक्ट्री की कोलन से अलग की गई सूची | ज़रूरी नहीं |
JAVA_RUNFILES |
$TEST_SRCDIR की वैल्यू |
काम नहीं करता या रोक दिया गया है |
LOGNAME |
$USER की वैल्यू |
इसे भरना ज़रूरी है |
PATH |
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:. |
सुझाया गया |
PWD |
$TEST_SRCDIR/workspace-name |
सुझाया गया |
SHLVL |
2 |
सुझाया गया |
TEST_INFRASTRUCTURE_FAILURE_FILE |
एक राइटेबल डायरेक्ट्री में निजी फ़ाइल का पूरा पाथ. इस फ़ाइल का इस्तेमाल सिर्फ़ टेस्ट इन्फ़्रास्ट्रक्चर से होने वाली गड़बड़ियों की शिकायत करने के लिए किया जाना चाहिए. यह आम तौर पर जांच में होने वाली गड़बड़ी की शिकायत करने के सामान्य तरीके के तौर पर इस्तेमाल नहीं किया जाना चाहिए. इस मामले में, टेस्टिंग इंफ़्रास्ट्रक्चर को ऐसे सिस्टम या लाइब्रेरी के तौर पर बताया जाता है जो टेस्ट के हिसाब से नहीं होती हैं. हालांकि, इससे टेस्ट में खराबी आ सकती है. पहली लाइन में, उस टेस्ट इन्फ़्रास्ट्रक्चर के कॉम्पोनेंट का नाम दिया गया है जिसकी वजह से गड़बड़ी हुई. वहीं, दूसरी कॉम्पोनेंट में खराबी के बारे में पढ़ा जा सकने वाला ब्यौरा है. अतिरिक्त लाइनों को अनदेखा कर दिया जाता है.) | ज़रूरी नहीं |
TEST_LOGSPLITTER_OUTPUT_FILE |
a writable डायरेक्ट्री में मौजूद निजी फ़ाइल का पूरा पाथ (इसका इस्तेमाल, लॉगस्प्लिटर प्रोटोबफ़र लॉग लिखने के लिए किया जाता है) | ज़रूरी नहीं |
TEST_PREMATURE_EXIT_FILE |
a writable डायरेक्ट्री में मौजूद निजी फ़ाइल का कुल पाथ (exit() पर कॉल पाने के लिए इस्तेमाल किया जाता है) |
ज़रूरी नहीं |
TEST_RANDOM_SEED |
अगर --runs_per_test विकल्प का इस्तेमाल किया जाता है, तो हर टेस्ट रन के लिए TEST_RANDOM_SEED को run number (1 से शुरू करके) पर सेट कर दिया जाता है. |
ज़रूरी नहीं |
TEST_RUN_NUMBER |
अगर --runs_per_test विकल्प का इस्तेमाल किया जाता है, तो हर टेस्ट रन के लिए TEST_RUN_NUMBER को run number (1 से शुरू करके) पर सेट कर दिया जाता है. |
ज़रूरी नहीं |
TEST_TARGET |
उस टारगेट का नाम जिसकी जांच की जा रही है | ज़रूरी नहीं |
TEST_SIZE |
टेस्ट size |
ज़रूरी नहीं |
TEST_TIMEOUT |
टेस्ट timeout सेकंड में |
ज़रूरी नहीं |
TEST_SHARD_INDEX |
शार्ड इंडेक्स, अगर sharding का इस्तेमाल किया गया हो |
ज़रूरी नहीं |
TEST_SHARD_STATUS_FILE |
फ़ाइल के पाथ की मदद से, sharding के लिए सहायता के बारे में बताना |
ज़रूरी नहीं |
TEST_SRCDIR |
रनफ़ाइल ट्री के बेस का सटीक पाथ | इसे भरना ज़रूरी है |
TEST_TOTAL_SHARDS |
कुल
shard count ,
अगर sharding का इस्तेमाल किया गया है |
ज़रूरी नहीं |
TEST_TMPDIR |
निजी लिखने योग्य निर्देशिका का निरपेक्ष पथ | इसे भरना ज़रूरी है |
TEST_WORKSPACE |
डेटा स्टोर करने की स्थानीय जगह का नाम | ज़रूरी नहीं |
TEST_UNDECLARED_OUTPUTS_DIR |
निजी राइटेबल डायरेक्ट्री का पूरा पाथ (इसका इस्तेमाल, टेस्टिंग के ऐसे आउटपुट लिखने के लिए किया जाता है जिनके बारे में जानकारी नहीं दी गई है). TEST_UNDECLARED_OUTPUTS_DIR
डायरेक्ट्री में लिखी गई सभी फ़ाइलें zip हो जाएंगी और
bazel-testlogs में outputs.zip फ़ाइल में जोड़ दी जाएंगी. |
ज़रूरी नहीं |
TEST_UNDECLARED_OUTPUTS_ANNOTATIONS_DIR |
निजी राइटेबल डायरेक्ट्री का पूरा पाथ (इस्तेमाल नहीं किया गया
टेस्ट आउटपुट एनोटेशन, एनोटेशन .part और .pb फ़ाइलें लिखने के लिए). |
ज़रूरी नहीं |
TEST_WARNINGS_OUTPUT_FILE |
लिखने लायक निजी डायरेक्ट्री में मौजूद निजी फ़ाइल का पाथ | ज़रूरी नहीं |
TESTBRIDGE_TEST_ONLY |
अगर बताया गया हो, तो
--test_filter
की वैल्यू |
ज़रूरी नहीं |
TZ |
UTC |
इसे भरना ज़रूरी है |
USER |
getpwuid(getuid())->pw_name की वैल्यू |
इसे भरना ज़रूरी है |
XML_OUTPUT_FILE |
वह जगह जहां जांच वाली कार्रवाइयों को जांच के नतीजे की एक्सएमएल आउटपुट फ़ाइल लिखनी चाहिए. नहीं तो, बेज़ल एक डिफ़ॉल्ट एक्सएमएल आउटपुट फ़ाइल जनरेट करता है, जो टेस्ट लॉग को जांच कार्रवाई के हिस्से के तौर पर रैप करती है. एक्सएमएल स्कीमा JUnit जांच के नतीजे से जुड़े स्कीमा पर आधारित होता है. | ज़रूरी नहीं |
BAZEL_TEST |
यह दिखाता है कि टेस्ट एक्ज़ीक्यूटेबल को bazel test से चलाया जा रहा है |
इसे भरना ज़रूरी है |
एनवायरमेंट में और एंट्री हो सकती हैं. टेस्ट में ऐसे किसी भी एनवायरमेंट वैरिएबल की मौजूदगी, मौजूदगी या वैल्यू पर निर्भर नहीं होना चाहिए जो ऊपर दी गई सूची में शामिल नहीं है.
काम करने की शुरुआती डायरेक्ट्री $TEST_SRCDIR/$TEST_WORKSPACE
होगी.
मौजूदा प्रोसेस आईडी, प्रोसेस ग्रुप आईडी, सेशन आईडी, और पैरंट प्रोसेस आईडी की जानकारी नहीं दी गई है. हो सकता है कि यह प्रोसेस, ग्रुप का लीडर हो या फिर सेशन का लीडर हो. इस प्रोसेस में कंट्रोल टर्मिनल हो सकता है या नहीं भी. इस प्रोसेस में शून्य या उससे ज़्यादा, बिना किसी चरण के चाइल्ड प्रोसेस हो सकते हैं. जब टेस्ट कोड कंट्रोल हो जाता है, तो प्रोसेस में कई थ्रेड नहीं होने चाहिए.
फ़ाइल डिस्क्रिप्टर 0 (stdin
) पढ़ने के लिए खुला रहेगा. हालांकि, यह क्या होगा और क्या नहीं, यह तय नहीं है. जांचों को इसे पढ़ना नहीं चाहिए. फ़ाइल डिस्क्रिप्टर 1 (stdout
) और 2 (stderr
) लिखने के लिए खुले होंगे. हालांकि, यह जानकारी नहीं दी गई है कि उनसे क्या जुड़ा है. यह एक टर्मिनल, पाइप, सामान्य फ़ाइल या कुछ भी हो सकता है
जो वर्णों को लिखा जा सकता है. वे खुली हुई फ़ाइल की टेबल में कोई एंट्री शेयर कर सकते हैं
(जिसका मतलब यह है कि वे अलग से किसी को नहीं खोज सकते). टेस्ट में ऐसी कोई भी फ़ाइल
शामिल नहीं होनी चाहिए जो खुली हो.
शुरुआती उमस्क 022
या 027
होगा.
कोई अलार्म या अंतराल टाइमर लंबित नहीं होगा.
ब्लॉक किए गए सिग्नल का शुरुआती मास्क खाली रहेगा. सभी सिग्नल अपनी डिफ़ॉल्ट कार्रवाई पर सेट हो जाएंगे.
संसाधन की बुनियादी सीमाएं, मुलायम और कठोर, दोनों होनी चाहिए और इन्हें इस तरह से सेट किया जाना चाहिए:
रिसॉर्स | सीमा |
---|---|
RLIMIT_AS |
अनलिमिटेड |
RLIMIT_CORE |
तय नहीं है |
RLIMIT_CPU |
अनलिमिटेड |
RLIMIT_DATA |
अनलिमिटेड |
RLIMIT_FSIZE |
अनलिमिटेड |
RLIMIT_LOCKS |
अनलिमिटेड |
RLIMIT_MEMLOCK |
अनलिमिटेड |
RLIMIT_MSGQUEUE |
तय नहीं है |
RLIMIT_NICE |
तय नहीं है |
RLIMIT_NOFILE |
कम से कम 1024 |
RLIMIT_NPROC |
तय नहीं है |
RLIMIT_RSS |
अनलिमिटेड |
RLIMIT_RTPRIO |
तय नहीं है |
RLIMIT_SIGPENDING |
तय नहीं है |
RLIMIT_STACK |
अनलिमिटेड या 2044 केबी <= रिलिम <= 8192केबी |
प्रोसेस करने में लगने वाला शुरुआती समय (जैसा कि times()
ने दिखाया है) और संसाधन का इस्तेमाल (getrusage()
के मुताबिक) नहीं बताया गया है.
शुरुआती शेड्यूल की नीति और प्राथमिकता तय नहीं है.
होस्ट सिस्टम की भूमिका
टेस्ट रनर को सीधे तौर पर कंट्रोल करने से, उपयोगकर्ता को ध्यान में रखा जाता है. साथ ही, जिस ऑपरेटिंग सिस्टम पर टेस्ट लागू होते हैं उसे जांच के लिए कुछ प्रॉपर्टी की ज़रूरत होती है.
फ़ाइल सिस्टम
किसी टेस्ट में देखी गई रूट डायरेक्ट्री, मूल रूट डायरेक्ट्री हो भी सकती है और नहीं भी.
/proc
को माउंट किया जाएगा.
बिल्ड के सभी टूल, /usr
में पूरे सिस्टम के साथ दिखेंगे.
हो सकता है कि /home
से शुरू होने वाले पाथ उपलब्ध न हों. टेस्ट को ऐसा कोई भी पाथ ऐक्सेस नहीं करना चाहिए.
/tmp
लिखा जा सकेगा और टेस्ट में इन पाथ का इस्तेमाल नहीं किया जाना चाहिए.
टेस्ट को यह नहीं मानना चाहिए कि खास इस्तेमाल के लिए कोई तय पाथ उपलब्ध है.
जांच में यह नहीं माना जाना चाहिए कि किसी भी माउंट किए गए फ़ाइल सिस्टम के लिए समय की सुविधा चालू है.
उपयोगकर्ता और समूह
उपयोगकर्ता रूट, कोई नहीं, और Unittest मौजूद होना चाहिए. ग्रुप को रूट करने के लिए, कोई भी मौजूद नहीं होना चाहिए.
टेस्ट को नॉन-रूट उपयोगकर्ता के तौर पर चलाया जाना चाहिए. असल और असरदार उपयोगकर्ता आईडी एक जैसे होने चाहिए, ठीक उसी तरह जैसे ग्रुप आईडी के लिए. इसके अलावा, मौजूदा यूज़र आईडी, ग्रुप आईडी, उपयोगकर्ता का नाम, और ग्रुप का नाम तय नहीं किया गया है. पूरक समूह आईडी का सेट बताया नहीं गया है.
मौजूदा यूज़र आईडी और ग्रुप आईडी में मिलते-जुलते नाम होने चाहिए, जिन्हें
getpwuid()
और getgrgid()
की मदद से, फिर से पाया जा सके. शायद पूरक ग्रुप आईडी के लिए ये चीज़ें सही न हों.
मौजूदा उपयोगकर्ता के पास होम डायरेक्ट्री होनी चाहिए. हो सकता है कि यह लिखा न जा सके. टेस्ट को लिखने की कोशिश नहीं की जानी चाहिए.
नेटवर्किंग
होस्टनेम की जानकारी नहीं है. इसमें बिंदु हो सकता है या नहीं भी. होस्टनेम को हल करने के लिए, आपको मौजूदा होस्ट का आईपी पता देना होगा. पहले बिंदु के बाद होस्टनेम कट का समाधान करना भी कारगर होना चाहिए. होस्टनेम लोकल होस्ट को ठीक करना होगा.
अन्य संसाधन
जांच में सीपीयू का कम से कम एक कोर दिया जाता है. हो सकता है कि कुछ अन्य उपलब्ध हों, लेकिन इसकी गारंटी नहीं दी जाती है. इस कोर के अन्य प्रदर्शन पहलू तय नहीं किए गए हैं. आप जांच के नियम में "सीपीयू:एन" (जहां n एक पॉज़िटिव संख्या है) टैग जोड़कर, बुकिंग की संख्या को सीपीयू की संख्या में बढ़ा सकते हैं. हालांकि, जब किसी मशीन में सीपीयू की कुल क्षमता और अनुरोध किए गए कुल कोर कम होंगे, तब भी बैजल जांच करेगा. अगर कोई टेस्ट शार्डिंग का इस्तेमाल करता है, तो हर अलग-अलग शार्ड यहां बताए गए सीपीयू कोर की संख्या को रिज़र्व रखेगा.
टेस्ट से सबप्रोसेस बन सकते हैं, लेकिन ग्रुप या सेशन को प्रोसेस नहीं किया जा सकता.
टेस्ट में इस्तेमाल की जा सकने वाली इनपुट फ़ाइलों की संख्या तय होती है. इस सीमा में बदलाव हो सकता है. हालांकि, फ़िलहाल यह हज़ारों इनपुट में हो सकता है.
समय और तारीख
मौजूदा समय और तारीख नहीं बताई गई है. सिस्टम का समय क्षेत्र नहीं बताया गया है.
X Windows उपलब्ध हो भी सकता है और नहीं भी. X सर्वर की ज़रूरत वाली जांच को Xvfb शुरू करना चाहिए.
फ़ाइल सिस्टम के साथ इंटरैक्शन की जांच करना
जब तक कि कुछ अलग न बताया गया हो, तब टेस्ट एनवायरमेंट वैरिएबल में बताए गए सभी फ़ाइल पाथ, लोकल फ़ाइल सिस्टम में किसी जगह पर ले जाएंगे.
टेस्ट को सिर्फ़ $TEST_TMPDIR
और $TEST_UNDECLARED_OUTPUTS_DIR
(अगर सेट हो) में बताई गई डायरेक्ट्री में फ़ाइलें बनानी चाहिए.
ये डायरेक्ट्री शुरुआत में खाली रहेंगी.
टेस्ट को इन डायरेक्ट्री को हटाने, बदलने या उनमें बदलाव करने की कोशिश नहीं करनी चाहिए.
ये डायरेक्ट्री, सिंबॉलिक लिंक हो सकती हैं.
$TEST_TMPDIR/.
के फ़ाइल सिस्टम के टाइप की जानकारी नहीं दी गई है.
टेस्ट, ऐसी आउटपुट फ़ाइलों की व्याख्या करने के लिए, $TEST_UNDECLARED_OUTPUTS_ANNOTATIONS_DIR
में .part फ़ाइलें भी लिख सकते हैं जिनके बारे में जानकारी नहीं दी गई है.
कुछ मामलों में, एक टेस्ट लागू करके, /tmp
में फ़ाइलें बनाई जा सकती हैं. उदाहरण के लिए,
यूनिक्स डोमेन सॉकेट के लिए पाथ की लंबाई की सीमाएं
आम तौर पर, /tmp
के तहत सॉकेट बनाना ज़रूरी है. Bazel, इन फ़ाइलों को ट्रैक नहीं कर पाएगा. हालांकि, जांच को सोच समझकर, यूनीक पाथ का इस्तेमाल करने, टेस्ट और नॉन-टेस्ट प्रोसेस चलाने, और /tmp
में बनने वाली फ़ाइलों को साफ़ करने के लिए, यूनीक पाथ का इस्तेमाल करने की ज़रूरत होगी.
JUnit4 TemporaryFolder
या Go TempDir
जैसे कुछ लोकप्रिय टेस्टिंग फ़्रेमवर्क के पास, /tmp
के तहत अस्थायी डायरेक्ट्री बनाने के अपने तरीके होते हैं. जांच करने वाले इन फ़्रेमवर्क में, /tmp
में फ़ाइलें हटाने वाली सुविधा शामिल है. इसलिए, TEST_TMPDIR
के बाहर फ़ाइलें बनाने के बावजूद भी उनका इस्तेमाल किया जा सकता है.
टेस्ट को रनफ़ाइल मैकेनिज़्म या एक्ज़ीक्यूशन एनवायरमेंट के दूसरे हिस्सों की मदद से इनपुट को ऐक्सेस करना चाहिए. इसका मकसद खास तौर पर इनपुट फ़ाइलों को उपलब्ध कराना है.
टेस्ट को उन पाथ पर बिल्ड सिस्टम के दूसरे आउटपुट को ऐक्सेस नहीं करना चाहिए जो खुद की एक्ज़ीक्यूटेबल की जगह से निकाले गए हों.
यह नहीं बताया गया है कि रनफ़ाइल ट्री में सामान्य फ़ाइलें, सिंबॉलिक लिंक या मिक्स शामिल हैं या नहीं. रनफ़ाइल ट्री में डायरेक्ट्री के सिमलिंक हो सकते हैं.
टेस्ट को रनफ़ाइल में मौजूद ..
कॉम्पोनेंट वाले पाथ का इस्तेमाल करने से बचना चाहिए.
रनफ़ाइल ट्री में कोई डायरेक्ट्री, फ़ाइल या सिमलिंक नहीं होना चाहिए. इनमें वे पाथ भी शामिल हैं जिन्हें लिखा जा सकता है. (इसके बाद, शुरुआती वर्किंग डायरेक्ट्री में लिखा नहीं जाना चाहिए.) टेस्ट को यह नहीं मानना चाहिए कि मौजूदा फ़ाइलों का कोई भी हिस्सा लिखा जा सकता है या उसके मालिक हैं (उदाहरण के लिए, chmod
और chgrp
काम नहीं कर सकते).
टेस्ट फ़ाइल चलाने के दौरान, रनफ़ाइल (जिसमें ऐसे पाथ शामिल होते हैं जिनसे सिमलिंक को पार किया जाता है) में बदलाव नहीं होना चाहिए. पैरंट डायरेक्ट्री और फ़ाइल सिस्टम माउंट में, किसी भी तरह से बदलाव नहीं होना चाहिए. ऐसा होने पर, रनफ़ाइल ट्री में कोई पाथ ठीक करने के नतीजे पर असर पड़ सकता है.
रिलीज़ होने से पहले ऐप्लिकेशन इस्तेमाल करने का समय पाने के लिए, एक टेस्ट उस फ़ाइल को बना सकता है जो TEST_PREMATURE_EXIT_FILE
शुरू होने पर दी जाती है. साथ ही, एग्ज़िट करने पर इस फ़ाइल को हटाया जा सकता है. अगर बेज़ल को यह जांच पूरी होने के बाद फ़ाइल दिखती है, तो यह मान लिया जाएगा कि टेस्ट समय से पहले खत्म हो गया है और उसे 'पूरा नहीं हुआ' के तौर पर मार्क किया जाएगा.
टैग के बारे में जानकारी
टेस्ट नियमों के कुछ टैग का खास मतलब होता है. tags
एट्रिब्यूट पर बैज़ल बिल्ड एन्साइक्लोपीडिया भी देखें.
टैग करें | मतलब |
---|---|
exclusive |
उसी समय कोई और जांच न करें |
external |
टेस्ट में बाहरी डिपेंडेंसी है; जांच की कैश मेमोरी बंद करें |
large |
test_suite कन्वेंशन, बड़े टेस्ट का सुइट |
manual * |
:... , :* या :all जैसे वाइल्डकार्ड टारगेट पैटर्न में टेस्ट टारगेट शामिल न करें |
medium |
test_suite कन्वेंशन; मीडियम टेस्ट का सुइट |
small |
test_suite कन्वेंशन, छोटे टेस्ट का सुइट |
smoke |
test_suite कन्वेंशन: इसका मतलब है कि इसे
वर्शन कंट्रोल सिस्टम में कोड में बदलाव करने से पहले चलाया जाना चाहिए |
रनफ़ाइल
नीचे दिए गए नियम में, मान लें कि //foo/bar:unittest
पर लेबल किया गया एक *_binary() नियम है. साथ ही, //deps/server:server
के लेबल वाले नियम पर, रनटाइम के हिसाब से डिपेंडेंसी की गई है.
जगह
टारगेट //foo/bar:unittest
की रनफ़ाइल डायरेक्ट्री, $(WORKSPACE)/$(BINDIR)/foo/bar/unittest.runfiles
है. इस पाथ को runfiles_dir
कहा जाता है.
डिपेंडेंसी
रनफ़ाइल डायरेक्ट्री में यह बताया जाता है कि *_binary()
नियम, कंपाइल करने में लगने वाले समय पर निर्भर है या नहीं. रनटाइम फ़ाइलें डायरेक्ट्री, BUILD फ़ाइलों के सेट पर निर्भर करती हैं. इन फ़ाइलों का असर *_binary()
नियम या कंपाइल टाइम या रनटाइम के हिसाब से लागू होने वाली फ़ाइलों पर पड़ता है. सोर्स फ़ाइलों में बदलाव करने से, रनटाइम फ़ाइलों की डायरेक्ट्री पर कोई असर नहीं पड़ता. इस वजह से, इमारत को फिर से बनाने के लिए ट्रिगर नहीं होता.
विषय सूची
रनफ़ाइल डायरेक्ट्री में ये चीज़ें शामिल होती हैं:
- रन-टाइम डिपेंडेंसी के सिमलिंक: हर EnergyFile और CommandRule,
जो
*_binary()
नियम की रन-टाइम डिपेंडेंसी है, उसे रनफ़ाइल डायरेक्ट्री में एक सिमलिंक से दिखाया जाता है. सिमलिंक का नाम$(WORKSPACE)/package_name/rule_name
है. उदाहरण के लिए, सर्वर के लिए सिमलिंक का नाम$(WORKSPACE)/deps/server/server
होगा, और पूरा पाथ$(WORKSPACE)/foo/bar/unittest.runfiles/$(WORKSPACE)/deps/server/server
होगा. सिमलिंक का डेस्टिनेशन, EnergyFile या CommandRule का EnergyFileName(), एक ऐब्सलूट पाथ के रूप में दिखाया जाता है. इस तरह, लिंक का डेस्टिनेशन$(WORKSPACE)/linux-dbg/deps/server/42/server
हो सकता है. - सब-रनफ़ाइल को सिमलिंक करना: हर
*_binary()
Z के लिए, जो*_binary()
C की रनिंग डिपेंडेंसी है, C की रनफ़ाइल डायरेक्ट्री में दूसरा लिंक Z का होता है. सिमलिंक का नाम$(WORKSPACE)/package_name/rule_name.runfiles
है. सिमलिंक का टारगेट, रनफ़ाइल डायरेक्ट्री है. उदाहरण के लिए, सभी सब-प्रोग्राम एक जैसी रनरन वाली डायरेक्ट्री शेयर करते हैं.