परीक्षण रिपोर्ट तैयार करें

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

फायरबेस एमुलेटर में नियम कवरेज रिपोर्ट तैयार करने की क्षमता शामिल है, ताकि जब आप किसी त्रुटि को पुन: उत्पन्न करते हैं तो आप देख सकें कि प्रत्येक उप-अभिव्यक्ति का वास्तव में क्या मूल्यांकन किया गया है। रिपोर्टें इस बारे में भी जानकारी प्रदान करती हैं कि पारंपरिक "लाइन कवरेज" तकनीकों की तरह प्रत्येक परीक्षण मामले में कितनी बार एक नियम का उपयोग किया जाता है।

एक रिपोर्ट तैयार करें

परीक्षणों का एक सूट चलाने के बाद, आप परीक्षण कवरेज रिपोर्ट तक पहुंच सकते हैं जो दिखाती है कि आपके प्रत्येक सुरक्षा नियम का मूल्यांकन कैसे किया गया था।

रिपोर्ट प्राप्त करने के लिए, एम्यूलेटर के चलने के दौरान उस पर एक उजागर समापन बिंदु को क्वेरी करें। ब्राउज़र-अनुकूल संस्करण के लिए, निम्न URL का उपयोग करें:

क्लाउड फायरस्टोर

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
 

रीयलटाइम डेटाबेस

http://localhost:9000/.inspect/coverage?ns=<database_name>
 

यह आपके नियमों को अभिव्यक्तियों और उप-अभिव्यक्तियों में तोड़ देता है जिन्हें आप अधिक जानकारी के लिए माउसओवर कर सकते हैं, जिसमें मूल्यांकन की संख्या और लौटाए गए मान भी शामिल हैं। इस डेटा के कच्चे JSON संस्करण के लिए, अपनी क्वेरी में निम्नलिखित URL शामिल करें:

क्लाउड फायरस्टोर

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
 

रीयलटाइम डेटाबेस

http://localhost:9000/.inspect/coverage.json?ns=<database_name>
 

डिबगिंग उदाहरण नियम

आसानी से एक परीक्षण रिपोर्ट तैयार करने के लिए, क्लाउड फायरस्टोर और रीयलटाइम डेटाबेस के लिए GitHub पर उपलब्ध एमुलेटर क्विकस्टार्ट का उपयोग करें। ये क्विकस्टार्ट आपको एमुलेटर को ठीक से स्थापित करने और आरंभ करने, फिर नियमों के एक उदाहरण सेट से नमूना परीक्षण तैयार करने में मार्गदर्शन करते हैं।

क्लाउड फायरस्टोर का उपयोग करने वाले एक उदाहरण ऐप पर विचार करें जो गिनता है कि उपयोगकर्ता कितनी बार एक बटन पर क्लिक करते हैं। ऐप निम्नलिखित नियम लागू करता है:

क्लाउड फायरस्टोर

 service cloud.firestore {
   match /databases/{database}/documents {
     match /counters/{counter} {
       allow read;
       allow write: if request.resource.data.value == resource.data.value +1;
     }
   }
 }
 

ऊपर दिखाए गए नियमों में त्रुटियों को डीबग करने के लिए, निम्नलिखित नमूना जावास्क्रिप्ट परीक्षण का उपयोग करें:

const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));

एम्यूलेटर ऊपर उल्लिखित यूआरएल पर उपलब्ध एक रिपोर्ट तैयार करता है:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

रिपोर्ट निम्नलिखित अपरिभाषित और शून्य-मूल्य त्रुटियाँ दिखाती है:

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

क्लाउड फायरस्टोर

 service cloud.firestore {
   match /databases/{database}/documents {
     match /counters/{counter} {
       allow read;
       allow create: if request.resource.data.value == 0;
       allow update: if request.resource.data.value == resource.data.value +1;
     }
   }
 }
 

जेनरेट की गई रिपोर्ट से पता चलता है कि प्रत्येक नियम का कितनी बार उपयोग किया गया और क्या लौटाया गया।