2010-01-14 11 views
6

सॉकेट त्रुटियों का अनुकरण कैसे करें? (कभी-कभी सर्वर या क्लाइंट कुछ सॉकेट त्रुटि के कारण डिस्कनेक्ट हो जाता है और पुन: पेश करना असंभव है।) मैं ऐसा करने के लिए एक टूल ढूंढ रहा था, लेकिन मुझे कोई नहीं मिला। क्या किसी को किसी भी उपकरण के बारे में पता है या यह कैसे करना है इस पर कोड उदाहरण है? (सी # या सी/सी ++)सॉकेट त्रुटियों का अनुकरण करें

+2

नेटवर्क केबल अनप्लग करें? – Eclipse

उत्तर

6

सॉकेट तक पहुंचने के लिए उपयोग किए जा रहे एपीआई में एक रैपर परत जोड़ें और उन्हें समय की रैंड()% 100> x प्रतिशत विफल करें।

+0

ठीक है, यह सुनिश्चित नहीं है कि यह कैसे करें .. असफल भाग .. – ra170

+0

@ रैपर फ़ंक्शन में @ आर 170, असली फ़ंक्शन के माध्यम से कॉल करने के बजाय, यह वापस लौटा है जो भी त्रुटि कोड का मतलब है कि उस एपीआई के कुछ भाग "विफल" समय –

1

मुझे इस गर्मी में बिल्कुल वही समस्या थी।

मेरे पास कस्टम Socket कक्षा थी और यह जांचना चाहता था कि क्या होगा यदि read या write अपवाद फेंक दिया। मैं वास्तव में चौखटे मजाक जावा की नकल करना चाहता था, और मैं इसे इस तरह से किया था:

मैं एक FakeSocket वर्ग में Socket वर्ग विरासत में मिला है, और कुछ एक SocketExpectation बुलाया बनाया। फिर, यूनिट परीक्षणों में, मैंने नकली सॉकेट बनाए, उम्मीदों को स्थापित किया और फिर उस नकली सॉकेट को उस कोड पर पारित किया जिसे मैं परीक्षण करना चाहता था।

uint32_t write(buffer, length); // calls check 
uint32_t read(buffer, length); // calls check 
bool matches(); 
void expect(expectation); 
uint32_t check(CallType, buffer, length) const; 

वे सब बहुत सीधे आगे:

FakeSocket इन तरीकों (अनावश्यक विवरण छीन) था। check वर्तमान अपेक्षाओं के खिलाफ तर्कों की जांच करता है और यदि सब कुछ योजना के अनुसार है, तो SocketExpectation आवश्यकता को पूरा करने के लिए आगे बढ़ता है।

typedef enum { write, read } CallType; 

SocketExpectation(CallType type); 
SocketExpectation &with_arguments(void *a1, uint32_t a2); // expects these args 
SocketExpectation &will_return(uint32_t value); 
SocketExpectation &will_throw(const char * e); // test error handling 
bool matches(); 

मैं और अधिक विधियां जोड़ के रूप में मैं उन्हें जरूरत:

SocketExpectation इस रूपरेखा (भी छीन) है। मैं इसे इस प्रकार बना है, तो प्रासंगिक विधि को नकली सॉकेट पारित:

fake_socket = FakeSocket(); 
fake_socket.expect(SocketExpectation(write).with_arguments(....).will_return(...)); 
fake_socket.expect(SocketExpectation(read).with_arguments(...).will_throw("something")); 
+0

पढ़ और लिखना अपवाद फेंक नहीं सकता –

+0

यह एक कस्टम सॉकेट क्लास है, जो कनेक्शन के साथ अप्रत्याशित कुछ हुआ तो अपवाद फेंक देता है। – laura

0

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

तो, मुझे लगता है कि, मेरा सुझाव यह है कि आप जिन परिस्थितियों का सामना कर रहे हैं उन्हें अनुकरण करने के बजाय आपको उन्हें समझना चाहिए और फिर उन्हें विश्वसनीय रूप से उत्पन्न करना चाहिए।

संबंधित मुद्दे