एन्साइक्लोपीडिया टेस्ट करें

समस्या की शिकायत करें सोर्स देखें

टेस्ट प्रोग्राम चलाने के लिए एनवायरमेंट की पूरी जानकारी.

बैकग्राउंड

Bazel BUILD भाषा में ऐसे नियम शामिल हैं जिनका इस्तेमाल कई भाषाओं में, अपने-आप होने वाले टेस्ट प्रोग्राम को तय करने के लिए किया जा सकता है.

टेस्ट, bazel test का इस्तेमाल करके किए जाते हैं.

उपयोगकर्ता सीधे टेस्ट बाइनरी भी एक्ज़ीक्यूट कर सकते हैं. इसकी अनुमति है, लेकिन इसका प्रचार नहीं किया जाता है. क्योंकि ऐसा करने पर, नीचे दिए गए मैंडेट का पालन नहीं होगा.

टेस्ट, हर्मेटिक होने चाहिए: इसका मतलब है कि उन्हें सिर्फ़ वे संसाधन ऐक्सेस करने चाहिए जिन पर वे डिपेंडेंसी के तौर पर जुड़े हों. अगर टेस्ट सही तरीके से हर्मेटिक नहीं हैं, तो वे पुराने तरीके से फिर से जनरेट किए जा सकने वाले नतीजे नहीं देते. यह गलती

कैंपेन का मकसद

इस पेज का मकसद औपचारिक तौर पर, Bazel टेस्ट के लिए रनटाइम एनवायरमेंट और उम्मीद के मुताबिक व्यवहार तय करना है. यह टेस्ट रनर और बिल्ड सिस्टम के लिए भी ज़रूरी शर्तें लागू करेगा.

टेस्ट एनवायरमेंट स्पेसिफ़िकेशन से, टेस्ट के लेखक तय न किए गए व्यवहार पर भरोसा करने से बचते हैं. इससे टेस्टिंग इन्फ़्रास्ट्रक्चर को लागू करने के तरीके में ज़्यादा बदलाव करने की आज़ादी मिलती है. इस तरीके में कुछ ऐसी कमियां हैं जो मौजूदा समय में कई जांचों को पास होने देती हैं, भले ही ये ठीक तरह से हर्मेटिक, तय करने वाले, और फिर से दिलचस्पी न लेने वाले डिवाइस हों.

यह पेज मान्य और आधिकारिक, दोनों तरह के होने के लिए बनाया गया है. अगर इस जानकारी और टेस्ट रनर के लागू किए गए व्यवहार में अंतर है, तो इस स्पेसिफ़िकेशन को प्राथमिकता दी जाएगी.

सुझाई गई जानकारी

"ज़रूरी है", "नहीं करना है", "ज़रूरी", "करना चाहिए", "नहीं", "चाहिए", "नहीं", "सुझाया गया", "किया जा सकता है", और "ज़रूरी नहीं" का मतलब ऐसे समझा जाना चाहिए जैसा आईईटीएफ़ आरएफ़सी 2119 में बताया गया है.

टेस्ट का मकसद

Bazel टेस्ट का मकसद, डेटा स्टोर करने की जगह में चेक की गई सोर्स फ़ाइलों की कुछ प्रॉपर्टी की पुष्टि करना होता है. (इस पेज पर, "सोर्स फ़ाइलें" में टेस्ट डेटा, गोल्डन आउटपुट, और वर्शन कंट्रोल में रखी गई अन्य सभी चीज़ें शामिल होती हैं.) एक उपयोगकर्ता ऐसे अलग-अलग वैरिएंट का दावा करने के लिए टेस्ट लिखता है जिसके इस्तेमाल को बनाए रखने की वह उम्मीद करता है. अन्य उपयोगकर्ता, बाद में जांच करके यह पता लगाते हैं कि वैरिएंट तो नहीं हुआ. अगर यह टेस्ट, सोर्स फ़ाइलों (नॉन-हर्मेटिक) के अलावा किसी दूसरे वैरिएबल पर निर्भर करता है, तो इसकी वैल्यू कम हो जाती है. ऐसा इसलिए होता है, क्योंकि बाद वाले उपयोगकर्ता यह पक्का नहीं कर सकते कि टेस्ट पास होने से रोकने पर उनके बदलावों में गलती है.

इसलिए, टेस्ट का नतीजा सिर्फ़ इन चीज़ों पर निर्भर होना चाहिए:

  • ऐसी सोर्स फ़ाइलें जिन पर टेस्ट की डिपेंडेंसी तय की गई है
  • बिल्ड सिस्टम के प्रॉडक्ट, जिन पर टेस्ट की डिपेंडेंसी बताई गई है
  • ऐसे संसाधन जिनके व्यवहार की गारंटी टेस्ट रनर से लगातार बनी रहती है

फ़िलहाल, ऐसा व्यवहार लागू नहीं किया जाता. हालांकि, टेस्ट रनर के पास आने वाले समय में इस तरह की नीति को लागू करने का अधिकार है.

बिल्ड सिस्टम की भूमिका

जांच के नियम, बाइनरी नियमों से मिलते-जुलते होते हैं. ऐसे में हर नियम के लिए एक एक्ज़ीक्यूटेबल प्रोग्राम होना ज़रूरी है. कुछ भाषाओं के लिए, यह एक स्टब प्रोग्राम है. इसमें भाषा के आधार पर, टेस्ट कोड के साथ इस्तेमाल किया जाता है. जांच के नियमों से अन्य आउटपुट भी जनरेट होने चाहिए. टेस्ट रनर को, प्राइमरी टेस्ट के लिए एक्ज़ीक्यूटेबल फ़ाइल के अलावा, रनफ़ाइल के मेनिफ़ेस्ट की ज़रूरत होगी. इसमें वे इनपुट फ़ाइलें शामिल होंगी जिन्हें रनटाइम के दौरान टेस्ट के लिए उपलब्ध कराया जाना चाहिए. साथ ही, इसे टेस्ट के टाइप, साइज़, और टैग की जानकारी की भी ज़रूरत हो सकती है.

बिल्ड सिस्टम, कोड और डेटा डिलीवर करने के लिए रनफ़ाइल का इस्तेमाल कर सकता है. (इसका इस्तेमाल ऑप्टिमाइज़ेशन के तौर पर, हर जांच की बाइनरी को छोटा करने के लिए किया जा सकता है. ऐसा, जांचों के बीच फ़ाइलें शेयर करके किया जा सकता है, जैसे कि डाइनैमिक लिंकिंग का इस्तेमाल करके.) बिल्ड सिस्टम को यह पक्का करना चाहिए कि जनरेट की गई एक्ज़ीक्यूटेबल फ़ाइल, सोर्स या आउटपुट ट्री में ऐब्सलूट लोकेशन के हार्डकोड किए गए रेफ़रंस के बजाय, टेस्ट रनर से मिले रनफ़ाइल इमेज से लोड की जाए.

टेस्ट रनर की भूमिका

टेस्ट रनर के हिसाब से, हर टेस्ट एक प्रोग्राम है जिसे execve() की मदद से शुरू किया जा सकता है. टेस्ट चलाने के दूसरे तरीके भी हो सकते हैं; उदाहरण के लिए, IDE, प्रोसेस के दौरान Java टेस्ट को चलाने की अनुमति दे सकता है. हालांकि, स्टैंडअलोन प्रोसेस के तौर पर टेस्ट चलाने के नतीजे को आधिकारिक माना जाना चाहिए. अगर कोई परीक्षण प्रक्रिया पूरी हो जाती है और शून्य कोड के साथ सामान्य रूप से खत्म हो जाती है, तो परीक्षण पास हो गया है. किसी भी अन्य नतीजे को टेस्ट फ़ेलियर माना जाता है. खास तौर पर, स्टडआउट के लिए PASS या FAIL में से किसी भी स्ट्रिंग को लिखने का, टेस्ट रनर के लिए कोई खास मतलब नहीं होता है.

अगर किसी टेस्ट को लागू होने में बहुत ज़्यादा समय लगता है, संसाधन की सीमा पार हो जाती है या टेस्ट रनर को किसी पाबंदी वाले व्यवहार का पता चलता है, तो हो सकता है कि टेस्ट बंद कर दिया जाए और टेस्ट को फ़ेल माना जाए. टेस्ट प्रोसेस या किसी बच्चे को सिग्नल भेजने के बाद, रनर को यह नहीं बताना चाहिए कि टेस्ट पास हो गया है.

पूरे टेस्ट टारगेट (अलग-अलग तरीकों या टेस्ट को नहीं) को पूरा होने तक सीमित समय दिया जाता है. टेस्ट की समयसीमा, नीचे दी गई टेबल के मुताबिक उसके timeout एट्रिब्यूट पर आधारित है:

टाइम आउट समय सीमा (सेकंड)
छोटा 60
मध्यम 300
लंबा 900
अनंत 3600

जो टेस्ट साफ़ तौर पर टाइम आउट की जानकारी नहीं देते हैं उनका size टेस्ट के आधार पर इस तरह से तय होता है:

साइज़ शामिल टाइम आउट लेबल
छोटा छोटा
medium मध्यम
बड़ा लंबा
विशाल अनंत

किसी "बड़े" टेस्ट को चलने के लिए 900 सेकंड दिए जाएंगे. हालांकि, इसमें टाइम आउट की कोई खास सेटिंग नहीं होगी. "कम" टाइम आउट वाले "मीडियम" टेस्ट को 60 सेकंड मिलेंगे.

timeout के उलट, size अतिरिक्त रूप से यह तय करता है कि स्थानीय तौर पर टेस्ट करते समय, अन्य संसाधनों (जैसे कि रैम) का सबसे ज़्यादा इस्तेमाल किया गया है या नहीं. इसकी जानकारी सामान्य डेफ़िनिशन में दी गई है.

size और timeout लेबल के सभी कॉम्बिनेशन कानूनी होते हैं. इसलिए, "बहुत ज़्यादा" टेस्ट के बारे में एलान किया जा सकता है कि टाइम आउट की अवधि "छोटा" हो. शायद यह कुछ वाकई भयानक काम बहुत जल्दी कर देगा.

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

जब सिस्टम को मैन्युअल तौर पर धीमा माना जाता है, तब टेस्ट टाइम आउट को --test_timeout बेज़ेल फ़्लैग से बदला जा सकता है. --test_timeout की वैल्यू सेकंड में दी गई हैं. उदाहरण के लिए, --test_timeout=120 टेस्ट टाइम आउट को दो मिनट पर सेट करता है.

टेस्ट टाइम आउट की कम से कम सीमा का सुझाव नीचे दिया गया है:

टाइम आउट कम से कम समय (सेकंड)
छोटा 0
मध्यम 30
लंबा 300
अनंत 900

उदाहरण के लिए, अगर कोई "मॉडरेट" टेस्ट 5.5 सेकंड में पूरा हो जाता है, तो timeout = "short" या size = "small" सेट करें. bazel --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 चालू है, तो Bazel जांच में सफल नहीं हो पाएगा.

शुरुआती स्थितियां

टेस्ट करते समय, टेस्ट रनर को कुछ शुरुआती शर्तें तय करनी होंगी.

टेस्ट रनर को हर जांच को, 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 लिखने वाली डायरेक्ट्री में किसी निजी फ़ाइल का ऐब्सलूट पाथ (Logsplitter प्रोटोबफ़र लॉग लिखने के लिए इस्तेमाल किया जाता है) ज़रूरी नहीं
TEST_PREMATURE_EXIT_FILE लिखने वाली डायरेक्ट्री में किसी निजी फ़ाइल का ऐब्सलूट पाथ (exit() पर कॉल करने के लिए इस्तेमाल किया जाता है) ज़रूरी नहीं
TEST_RANDOM_SEED अगर --runs_per_test विकल्प का इस्तेमाल किया जाता है, तो हर बार टेस्ट के लिए TEST_RANDOM_SEED को एक से शुरू होने वाले run number (एक से शुरू) पर सेट किया जाता है. ज़रूरी नहीं
TEST_RUN_NUMBER अगर --runs_per_test विकल्प का इस्तेमाल किया जाता है, तो हर बार टेस्ट के लिए TEST_RUN_NUMBER को एक से शुरू होने वाले run number (एक से शुरू) पर सेट किया जाता है. ज़रूरी नहीं
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 डायरेक्ट्री में लिखी गई सभी फ़ाइलों को ज़िप अप किया जाएगा और 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 वह जगह जहां पर टेस्ट की कार्रवाइयों को, टेस्ट नतीजे की एक्सएमएल आउटपुट फ़ाइल लिखनी चाहिए. नहीं तो, Bazel, टेस्ट कार्रवाई के तौर पर टेस्ट लॉग को रैप करते हुए, एक डिफ़ॉल्ट एक्सएमएल आउटपुट फ़ाइल जनरेट करता है. एक्सएमएल स्कीमा, 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 केबी <= rlim <= 8192 केबी

प्रोसेस की शुरुआत में लगने वाला समय (times() से मिला डेटा) और संसाधन के इस्तेमाल (जैसा कि getrusage() ने दिखाया है) की जानकारी नहीं दी गई है.

शेड्यूल करने की शुरुआती नीति और प्राथमिकता की जानकारी नहीं है.

होस्ट सिस्टम की भूमिका

टेस्ट रनर के सीधे कंट्रोल में उपयोगकर्ता के कॉन्टेक्स्ट के अलावा, जिस ऑपरेटिंग सिस्टम पर टेस्ट चलाया जाता है उसे कुछ प्रॉपर्टी के हिसाब से टेस्ट चलाना होता है.

फ़ाइल सिस्टम

टेस्ट के ज़रिए देखी गई रूट डायरेक्ट्री, असली रूट डायरेक्ट्री हो सकती है और नहीं भी.

/proc को माउंट किया जाएगा.

सभी बिल्ड टूल, /usr से नीचे के ऐब्सलूट पाथ पर मौजूद होने चाहिए जिसका इस्तेमाल लोकल इंस्टॉलेशन में होता है.

हो सकता है कि /home से शुरू होने वाले पाथ उपलब्ध न हों. टेस्ट को ऐसे किसी भी पाथ को ऐक्सेस नहीं करना चाहिए.

/tmp लिखा जा सकेगा, लेकिन टेस्ट में इन पाथ का इस्तेमाल करने से बचना चाहिए.

टेस्ट को यह नहीं मानना चाहिए कि उनके खास इस्तेमाल के लिए, कोई स्थायी पाथ उपलब्ध है.

टेस्ट में यह नहीं मानना चाहिए कि माउंट किए गए किसी फ़ाइल सिस्टम के लिए, atime चालू हैं या नहीं.

उपयोगकर्ता और समूह

उपयोगकर्ता का रूट, कोई भी नहीं, और यूनिटटेस्ट मौजूद होना चाहिए. ग्रुप रूट, किसी का भी नहीं, और इंजी होना ज़रूरी है.

टेस्ट को नॉन-रूट उपयोगकर्ता के तौर पर एक्ज़ीक्यूट किया जाना चाहिए. ग्रुप आईडी के लिए, असली और असरदार यूज़र आईडी एक जैसे होने चाहिए. इसके अलावा, मौजूदा यूज़र आईडी, ग्रुप आईडी, उपयोगकर्ता का नाम, और ग्रुप के नाम की जानकारी नहीं दी गई है. पूरक समूह आईडी के सेट की जानकारी नहीं दी गई है.

मौजूदा यूज़र आईडी और ग्रुप आईडी में एक जैसे नाम होने चाहिए, जिन्हें getpwuid() और getgrgid() का इस्तेमाल करके फिर से हासिल किया जा सके. ऐसा हो सकता है कि पूरक ग्रुप आईडी के लिए भी यह सही न हो.

मौजूदा उपयोगकर्ता के पास होम डायरेक्ट्री होनी चाहिए. हो सकता है कि यह लिखने लायक न हो. जांचों को उसमें लिखने की कोशिश नहीं करनी चाहिए.

नेटवर्किंग

होस्टनेम की जानकारी नहीं दी गई है. इसमें बिंदु हो भी सकता है या नहीं भी हो सकता है. होस्टनेम का समाधान करने से मौजूदा होस्ट का आईपी पता मिलना चाहिए. पहले बिंदु के बाद होस्टनेम कट को हल करने में भी काम होना चाहिए. होस्टनेम लोकलहोस्ट का समाधान करना ज़रूरी है.

अन्य संसाधन

जांच के लिए कम से कम एक सीपीयू कोर की ज़रूरत होती है. अन्य उपलब्ध हो सकते हैं, लेकिन इसकी गारंटी नहीं है. इस कोर के अन्य प्रदर्शन पहलुओं के बारे में नहीं बताया गया है. जांच के नियम में "cpu:n" (जहां n एक पॉज़िटिव संख्या है) टैग जोड़कर, ज़्यादा संख्या में सीपीयू (CPU) की संख्या के लिए रिज़र्वेशन को बढ़ाया जा सकता है. अगर किसी मशीन में अनुरोध किए गए से कम सीपीयू कोर हैं, तो भी Bazel जांच करेगा. अगर किसी टेस्ट में शार्डिंग का इस्तेमाल किया जाता है, तो हर शार्ड यहां बताए गए सीपीयू कोर के लिए रिज़र्व रहेगा.

टेस्ट, सब-प्रोसेस बना सकते हैं, लेकिन ग्रुप या सेशन को प्रोसेस नहीं.

जांच में इस्तेमाल की जा सकने वाली इनपुट फ़ाइलों की संख्या की सीमा तय होती है. इस सीमा में बदलाव हो सकता है, लेकिन फ़िलहाल यह हज़ारों इनपुट की रेंज में है.

समय और तारीख

मौजूदा समय और तारीख की जानकारी नहीं है. सिस्टम का टाइमज़ोन नहीं बताया गया है.

X Windows उपलब्ध हो भी सकता है और नहीं भी. जिन टेस्ट के लिए X सर्वर की ज़रूरत होती है उन्हें Xvfb शुरू होना चाहिए.

फ़ाइल सिस्टम के साथ इंटरैक्शन की जांच करना

टेस्ट एनवायरमेंट वैरिएबल में बताए गए सभी फ़ाइल पाथ, लोकल फ़ाइल सिस्टम पर कहीं भी ले जाते हैं, बशर्ते कुछ और अलग से न बताया गया हो.

जांच में सिर्फ़ उन डायरेक्ट्री में फ़ाइलें बनाई जानी चाहिए जिनके बारे में $TEST_TMPDIR और $TEST_UNDECLARED_OUTPUTS_DIR (अगर सेट किया गया है) में बताया गया है.

ये डायरेक्ट्री शुरुआत में खाली रहेंगी.

जांच में, इन डायरेक्ट्री को हटाने, chmod बदलने या इनमें बदलाव करने की कोशिश नहीं की जानी चाहिए.

ये डायरेक्ट्री, सिंबॉलिक लिंक हो सकती हैं.

$TEST_TMPDIR/. के फ़ाइल सिस्टम टाइप की जानकारी नहीं दी गई है.

टेस्ट, नहीं बताई गई आउटपुट फ़ाइलों के बारे में जानकारी देने के लिए $TEST_UNDECLARED_OUTPUTS_ANNOTATIONS_DIR में .part फ़ाइलें भी लिख सकते हैं.

बहुत कम मामलों में, जांच के लिए /tmp में फ़ाइलें बनाने की ज़रूरत पड़ सकती है. उदाहरण के लिए, Unix डोमेन सॉकेट के लिए पाथ की लंबाई की सीमाएं आम तौर पर, /tmp के तहत सॉकेट बनाने की ज़रूरत होती है. Bazel ऐसी फ़ाइलों को ट्रैक नहीं कर पाएगा; टेस्ट को खुद ही हेमेटिक होना चाहिए, ताकि दूसरे पाथ से टकराने से बचा जा सके. साथ ही, टेस्ट और गैर-टेस्ट प्रोसेस चल रहे हों और /tmp में बनाई गई फ़ाइलों को साफ़ किया जा सके.

कुछ लोकप्रिय टेस्टिंग फ़्रेमवर्क, जैसे कि JUnit4 TemporaryFolder या Go TempDir में, /tmp में अस्थायी डायरेक्ट्री बनाने के अपने तरीके मौजूद हैं. इन टेस्टिंग फ़्रेमवर्क में ऐसी सुविधाएं शामिल हैं जो /tmp में मौजूद फ़ाइलों को क्लाउड पर ठीक करती हैं. इसलिए, TEST_TMPDIR के बाहर फ़ाइलें बनाने के बाद भी इनका इस्तेमाल किया जा सकता है.

टेस्ट को रनफ़ाइल तरीके या प्रोग्राम चलाने के माहौल के दूसरे हिस्सों से इनपुट ऐक्सेस करने चाहिए. इनका मकसद खास तौर पर इनपुट फ़ाइलों को उपलब्ध कराना है.

टेस्ट को खुद के एक्ज़ीक्यूटेबल की जगह से अनुमानित पाथ पर, बिल्ड सिस्टम के दूसरे आउटपुट को ऐक्सेस नहीं करना चाहिए.

यह नहीं बताया गया है कि रनफ़ाइल ट्री में सामान्य फ़ाइलें हैं, सिंबॉलिक लिंक हैं या मिक्स्चर हैं. रनफ़ाइल ट्री में, डायरेक्ट्री के लिए सिमलिंक हो सकते हैं. टेस्ट में, रनफ़ाइल ट्री में .. कॉम्पोनेंट वाले पाथ का इस्तेमाल करने से बचना चाहिए.

रनफ़ाइल ट्री में कोई भी डायरेक्ट्री, फ़ाइल या सिमलिंक नहीं लिखा जाना चाहिए. इसमें वे पाथ भी शामिल हैं जिनमें सिमलिंक को ट्रैवर्स किया जाता है. (इसका मतलब यह है कि शुरुआती डायरेक्ट्री को लिखा जा सकता है.) जांच में यह नहीं मानना चाहिए कि रनफ़ाइल का कोई भी हिस्सा लिखने लायक है या उसका मालिकाना हक मौजूदा उपयोगकर्ता के पास है (उदाहरण के लिए, chmod और chgrp काम नहीं कर सकते).

टेस्ट के चलने के दौरान रनफ़ाइल ट्री (इसमें सिमलिंक को पार करने वाले पाथ शामिल हैं) में बदलाव नहीं होना चाहिए. पैरंट डायरेक्ट्री और फ़ाइल सिस्टम माउंट में किसी भी तरह का बदलाव नहीं होना चाहिए. इसका असर रनफ़ाइल ट्री में पाथ के समाधान के नतीजे पर पड़ता है.

समय से पहले बाहर निकलने के बारे में जानकारी पाने के लिए, टेस्ट शुरू होने पर TEST_PREMATURE_EXIT_FILE के बताए गए पाथ पर एक फ़ाइल बना सकता है और बाहर निकलने पर उसे हटा सकता है. अगर टेस्ट पूरा होने पर बैजल को फ़ाइल दिखती है, तो यह मान लिया जाएगा कि टेस्ट समय से पहले बंद हो गया है. साथ ही, उसे 'फ़ेल हो गया' के तौर पर मार्क किया जाता है.

टैग कन्वेंशन

जांच के नियमों में मौजूद कुछ टैग का एक खास मतलब होता है. tags एट्रिब्यूट पर, Bazel बिल्ड एन्साइक्लोपीडिया भी देखें.

टैग करें मतलब
exclusive एक ही समय पर कोई और टेस्ट न चलाएं
external टेस्ट में बाहरी निर्भरता है; टेस्ट को कैश मेमोरी में सेव करने की सुविधा बंद करें
large test_suite कन्वेंशन; बड़े टेस्ट का सुइट
manual * :..., :* या :all जैसे वाइल्डकार्ड टारगेट पैटर्न में टेस्ट टारगेट शामिल न करें
medium test_suite कन्वेंशन; मीडियम टेस्ट का सुइट
small test_suite कन्वेंशन; छोटे टेस्ट का सुइट
smoke test_suite कन्वेंशन; इसका मतलब है कि इसे वर्शन कंट्रोल सिस्टम में कोड बदलने से पहले चलाया जाना चाहिए

रनफ़ाइलें

नीचे दी गई टेबल में, मान लें कि *_binary() नियम है जिसे //foo/bar:unittest लेबल किया गया है. साथ ही, इसमें //deps/server:server लेबल वाले नियम पर रन-टाइम डिपेंडेंसी है.

जगह

टारगेट //foo/bar:unittest के लिए रनफ़ाइल डायरेक्ट्री, $(WORKSPACE)/$(BINDIR)/foo/bar/unittest.runfiles डायरेक्ट्री है. इस पाथ को runfiles_dir कहा जाता है.

डिपेंडेंसी

रन फ़ाइल डायरेक्ट्री को *_binary() नियम के कंपाइल-टाइम डिपेंडेंसी के तौर पर तय किया गया है. रनफ़ाइल डायरेक्ट्री अपने आप में BUILD फ़ाइलों के सेट पर निर्भर करती है, जो *_binary() नियम या उसके किसी भी कंपाइल-टाइम या रन-टाइम डिपेंडेंसी पर असर डालती है. सोर्स फ़ाइलों में बदलाव करने से रनफ़ाइल डायरेक्ट्री के स्ट्रक्चर पर कोई असर नहीं पड़ता. इस वजह से, फिर से कोई इमारत नहीं बनाई जाती.

विषय सूची

रनफ़ाइल डायरेक्ट्री में ये चीज़ें शामिल हैं:

  • रन-टाइम डिपेंडेंसी के लिए सिमलिंक: हर एक आउटपुट-फ़ाइल और Commandनियम, जो *_binary() नियम की रन-टाइम डिपेंडेंसी है, रनफ़ाइल डायरेक्ट्री में एक सिमलिंक के तौर पर दिखाया जाता है. सिमलिंक का नाम $(WORKSPACE)/package_name/rule_name है. उदाहरण के लिए, सर्वर के सिमलिंक को $(WORKSPACE)/deps/server/server और पूरे पाथ का नाम $(WORKSPACE)/foo/bar/unittest.runfiles/$(WORKSPACE)/deps/server/server होगा. सिमलिंक का डेस्टिनेशन, OUTFile या Command बटन का OUTFileName() होता है. इसे ऐब्सलूट पाथ के तौर पर दिखाया जाता है. इसलिए, सिमलिंक का डेस्टिनेशन $(WORKSPACE)/linux-dbg/deps/server/42/server हो सकता है.
  • सब-रनफ़ाइल के लिए सिमलिंक: हर *_binary() Z के लिए, जो *_binary() C की रन-टाइम डिपेंडेंसी है, C की रनफ़ाइल डायरेक्ट्री में Z की रनफ़ाइल का दूसरा लिंक होता है. सिमलिंक का नाम $(WORKSPACE)/package_name/rule_name.runfiles है. सिमलिंक का टारगेट रनफ़ाइल डायरेक्ट्री है. उदाहरण के लिए, सभी सब-प्रोग्राम एक ही रनफ़ाइल डायरेक्ट्री को शेयर करते हैं.