פרויקט רכיב עבודות מתקשר¶
בפרק הקודם בנינו שירות עבודות מקומי. עכשיו נוסיף לו חזית COM ולקוח שמתקשר עם מקור HTTPS. המטרה היא לראות את אותה עבודה עוברת בין חוזים שונים בלי לאבד זהות, בעלות או משמעות של כשל.
המוצר שנבנה¶
הלקוח המקומי יבקש משאב טקסט קטן משרת HTTPS של המעבדה, יחשב עליו checksum לימודי ויציג תוצאה. הכתובת מוגדרת מראש בתצורת השירות, ולא מתקבלת כURL חופשי מכל לקוח. כך לא נהפוך שירות בעל הרשאות לרכיב שמבצע בקשות לכל יעד בשם המשתמש.
הממשק של COM יחשוף התחלה, בירור ובקשת ביטול. כל התחלה תקבל מזהה בקשה שנוצר אצל הלקוח. העבודה תחזיק את הזהות המאומתת של הלקוח, את הגרסה ואת מגבלת הגודל. השרת יסרב לתוכן גדול מ64 KiB ויגביל את מספר העבודות הפעילות.
הלקוח ישתמש בSTA כדי שנוכל לבדוק pumping, אך עבודת הרשת לא תחסום את לולאת הUI. כל מעבר ממשק בין apartments יתבצע באמצעות marshalling מתאים. הממשק הפרטי יוגדר בIDL, וproxy/stub או type library ייבנו וייכללו בהתקנה לפי סוג הממשק שנבחר.
סדר הבנייה¶
תחילה בנו את הליבה עם transport מזויף שניתן לעכב ולהכשיל. אחר כך חברו קריאת HTTPS מוגבלת ובדקו אותה בנפרד. רק לאחר מכן הוסיפו adapter של COM ולקוח שמפעיל אותו דרך גבול apartment. בסיום העבירו את השרת לתהליך נפרד ובדקו קריסה וחיבור מחדש.
הפרדה זו מאפשרת לדעת אם כשל נמצא במכונת המצבים, בTLS או בהפעלה של COM. כל שלב צריך להיות ניתן להרצה עם קלט קבוע ותוצאה מתועדת.
תרחישים שחייבים לבדוק¶
- בדקו certificate תקין, שם שרת שגוי ושרשרת אמון חסרה. הדחייה חייבת להתרחש בלי ביטול בדיקות TLS.
- בדקו תוצאה בגודל המותר, byte נוסף מעל המגבלה, ושרת ששולח לאט. הבחינו בין timeout של פעולה לבין deadline כולל.
- בדקו ביטול לפני התחלה, בזמן קריאה ואחרי commit. הציגו את המצב האמיתי גם אם המשתמש כבר סגר את המסך.
- בדקו אותו request ID עם אותו קלט ועם קלט שונה, וכן שני משתמשים שבוחרים אותו מספר.
- בדקו חסימת STA במצב מעבדה, תיקון באמצעות זרימה אסינכרונית, וcallback שמגיע אחרי בקשת סגירה.
- בדקו לקוח ישן מול שרת חדש, חוסר תמיכה בממשק חדש ושרת שנעלם לפני תשובה.
מה מגישים¶
הגישו קוד, פקודות build, manifest של תלויות, רישום מוגבל לרכיב המעבדה והוראות הסרה. צרפו תרשים חיי בקשה, טבלת בעלות על COM references ועל buffers, וtrace של עבודה אחת עם שני ניסיונות.
הגישו גם תוצאות מדודות של הבדיקות, כולל גרסת Windows והtoolchain. תרחיש שלא הורץ יופיע כלא נבדק. תנאי הסיום הוא שכל מצב סופי מוסבר, שכל דחייה נובעת מהגבול המתאים, ושאין משאב שמשתחרר לפני ההשלמה האחרונה שיכולה להשתמש בו.