कर्नेल नेटवर्किंग यूनिट टेस्ट

एंड्रॉइड 5.0 के बाद से, लिनक्स कर्नेल पर एंड्रॉइड नेटवर्किंग स्टैक के उचित संचालन के लिए कई कमिट की आवश्यकता होती है जो अपेक्षाकृत हाल ही में अपस्ट्रीम किए गए थे या अभी तक इसे अपस्ट्रीम नहीं बनाया है। आवश्यक कर्नेल कार्यक्षमता को मैन्युअल रूप से सत्यापित करना या लापता कमिट को ट्रैक करना आसान नहीं है, इसलिए एंड्रॉइड टीम यह सुनिश्चित करने के लिए उपयोग किए जाने वाले परीक्षणों को साझा कर रही है कि कर्नेल अपेक्षित व्यवहार करता है।

परीक्षण क्यों चलाएँ?

ये परीक्षण तीन मुख्य कारणों से मौजूद हैं:

  1. किसी डिवाइस पर उपयोग किए जाने वाले लिनक्स कर्नेल का सटीक संस्करण आमतौर पर डिवाइस-विशिष्ट होता है, और यह जानना मुश्किल है कि परीक्षण चलाए बिना कोई कर्नेल ठीक से काम करेगा या नहीं।
  2. कर्नेल पैच को अलग-अलग कर्नेल संस्करणों या अलग-अलग डिवाइस ट्री में फ़ॉरवर्ड-पोर्टिंग और बैक-पोर्ट करने से सूक्ष्म समस्याएं आ सकती हैं जिन्हें परीक्षण चलाए बिना पहचानना असंभव हो सकता है।
  3. नई नेटवर्किंग सुविधाओं के लिए नई कर्नेल कार्यक्षमता या कर्नेल बग फिक्स की आवश्यकता हो सकती है।

यदि परीक्षण पास नहीं होते हैं, तो डिवाइस का नेटवर्क स्टैक गलत तरीके से व्यवहार करेगा, जिससे उपयोगकर्ता-दृश्य कनेक्टिविटी बग (जैसे वाई-फाई नेटवर्क का बंद हो जाना) हो जाएगा। डिवाइस संभवतः Android संगतता परीक्षण सुइट (CTS) परीक्षणों में भी विफल हो जाएगा।

परीक्षणों का उपयोग करना

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

ARCH=um के लिए कर्नेल संकलित करना

परीक्षण चलाने के लिए, कर्नेल को ARCH=um SUBARCH=x86_64 के लिए संकलित करना होगा। यह अपस्ट्रीम और सामान्य एंड्रॉइड कर्नेल ट्री (जैसे android-4.4 ) दोनों में एक समर्थित आर्किटेक्चर है। लेकिन कभी-कभी डिवाइस कर्नेल इस मोड में संकलित नहीं होते हैं क्योंकि डिवाइस ट्री में सामान्य फ़ाइलों में डिवाइस-विशिष्ट या हार्डवेयर-विशिष्ट कोड होते हैं (उदाहरण के लिए sys/exit.c )।

कई मामलों में, यह सुनिश्चित करना पर्याप्त है कि हार्डवेयर-विशिष्ट कोड #ifdef के पीछे है। आमतौर पर यह कॉन्फ़िगरेशन विकल्प पर #ifdef होना चाहिए जो कोड से संबंधित विशिष्ट सुविधा को नियंत्रित करता है। यदि ऐसा कोई कॉन्फ़िगरेशन विकल्प नहीं है, तो #ifndef CONFIG_UML ब्लॉक के अंदर हार्डवेयर-विशिष्ट कोड डालें।

सामान्य तौर पर, इसे ठीक करना कर्नेल ट्री प्रदाता (जैसे चिपसेट या एसओसी विक्रेता) की जिम्मेदारी होनी चाहिए। हम यह सुनिश्चित करने के लिए OEM और विक्रेताओं के साथ काम कर रहे हैं कि वर्तमान और भविष्य के कर्नेल ARCH=um SUBARCH=x86_64 के लिए बिना किसी बदलाव की आवश्यकता के संकलित होंगे।

परीक्षण चल रहा है

परीक्षण kernel/tests/net/test पर हैं। यह अनुशंसा की जाती है कि परीक्षण AOSP मुख्य से चलाए जाएं क्योंकि वे सबसे अद्यतित हैं; कुछ मामलों में, कर्नेल सुविधाएँ जो किसी दिए गए एंड्रॉइड रिलीज़ में उचित संचालन के लिए आवश्यक हैं, दिए गए रिलीज़ में अभी तक पूर्ण परीक्षण कवरेज नहीं है। परीक्षण चलाने के तरीके के बारे में जानकारी के लिए, कर्नेल नेटवर्क परीक्षण README फ़ाइल देखें। मूल रूप से, अपने कर्नेल ट्री के शीर्ष से, चलाएँ:

ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh

परीक्षण पास करना

कर्नेल नेटवर्क परीक्षण पायथन स्रोत फ़ाइलों में टिप्पणियाँ होती हैं जो कर्नेल कमिट निर्दिष्ट करती हैं जिन्हें परीक्षण पास करने के लिए आवश्यक माना जाता है। परीक्षणों को सामान्य कर्नेल पेड़ों - सभी सामान्य कर्नेल शाखाओं android-4.4 और उच्चतर - एओएसपी में kernel/common प्रोजेक्ट में पास होना चाहिए। इसलिए, कर्नेल पर परीक्षण पास करना केवल संबंधित सामान्य कर्नेल शाखा से लगातार विलय का मामला है।

योगदान

रिपोर्टिंग मुद्दे

कृपया कंपोनेंट-नेटवर्किंग लेबल के साथ एंड्रॉइड इश्यू ट्रैकर में कर्नेल नेटवर्क परीक्षणों के साथ किसी भी समस्या की रिपोर्ट करें।

प्रतिबद्धताओं का दस्तावेजीकरण करना और परीक्षण जोड़ना

कृपया ऊपर वर्णित समस्याओं की रिपोर्ट करें, और यदि संभव हो तो समस्या को ठीक करने के लिए परिवर्तन अपलोड करें, यदि:

  • परीक्षण सामान्य कर्नेल पेड़ों पर सफल नहीं होते हैं
  • आपको एक आवश्यक प्रतिबद्धता मिलती है जिसका उल्लेख स्रोत टिप्पणियों में नहीं किया गया है,
  • अपस्ट्रीम कर्नेल पर परीक्षण पास करने के लिए बड़े बदलावों की आवश्यकता होती है
  • आप मानते हैं कि परीक्षण अत्यधिक निर्दिष्ट हैं, या भविष्य के कर्नेल पर परीक्षण विफल हो जाता है
  • आप मौजूदा परीक्षणों में अधिक परीक्षण या अधिक कवरेज जोड़ना चाहेंगे।