Erlang 21

ct_telnet




erlang

ct_telnet

मॉड्यूल

ct_telnet

मॉड्यूल सारांश

टेलनेट क्लाइंट के शीर्ष पर सामान्य टेस्ट विशिष्ट परत ct_telnet_client.erl

विवरण

टेलनेट क्लाइंट के शीर्ष पर Common Test विशिष्ट परत ct_telnet_client.erl

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

ct_telnet में परिभाषित डिफ़ॉल्ट मान:

  • कनेक्शन टाइमआउट (कनेक्शन के लिए प्रतीक्षा करने का समय) = 10 सेकंड

  • कमांड टाइमआउट (लौटने के लिए कमांड के लिए प्रतीक्षा करने का समय) = 10 सेकंड

  • पुनः प्रयास के अधिकतम संख्या = 3

  • पुनरावृत्ति अंतराल (पुन: प्रयास के बीच में प्रतीक्षा करने का समय) = 5 सेकंड

  • जीवित रखें (यदि कनेक्शन निष्क्रिय है तो सर्वर को हर 8 सेकंड पर एनओपी भेजता है) = true

  • मतदान की सीमा (शेष स्ट्रिंग को प्राप्त करने के लिए मतदान की अधिकतम संख्या) = 0

  • मतदान अंतराल (मतदान के बीच का समय) = 1 सेकंड

  • टेलनेट सॉकेट के लिए TCP_NODELAY विकल्प डिफ़ॉल्ट रूप से अक्षम ( false सेट) है

इन मापदंडों को निम्नलिखित विन्यास शब्द के साथ उपयोगकर्ता द्वारा संशोधित किया जा सकता है:

{telnet_settings, [{connect_timeout,Millisec},
                   {command_timeout,Millisec},
                   {reconnection_attempts,N},
                   {reconnection_interval,Millisec},
                   {keep_alive,Bool},
                   {poll_limit,N},
                   {poll_interval,Millisec},
                   {tcp_nodelay,Bool}]}.

Millisec = integer(), N = integer()

टेस्ट में शामिल कॉन्फ़िगरेशन फ़ाइल में telnet_settings शब्द दर्ज करें और ct_telnet स्वचालित रूप से जानकारी को पुनः प्राप्त करता है।

यदि आवश्यक हो तो keep_alive को कनेक्शन के अनुसार निर्दिष्ट किया जा सकता है। जानकारी के लिए, unix_telnet देखें।

लॉगिंग

ct_telnet का डिफ़ॉल्ट लॉगिंग व्यवहार ct_telnet ऑपरेशन HTML लॉग के लिए किए गए ऑपरेशन, कमांड और उनके संबंधित परिणामों के बारे में जानकारी प्रिंट करना है। निम्न HTML लॉग में मुद्रित नहीं होता है: टेलनेट सर्वर से भेजे गए टेक्स्ट स्ट्रिंग्स जो स्पष्ट रूप से ct_telnet फ़ंक्शन द्वारा प्राप्त नहीं किए ct_telnet हैं, जैसे कि expect/3 । हालाँकि, ct_telnet को सभी टेलनेट ट्रैफ़िक को लॉग करने के लिए ct_conn_log_h में कार्यान्वित एक विशेष उद्देश्य ईवेंट हैंडलर का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है। इस हैंडलर का उपयोग करने के लिए, cth_conn_log नामक एक Common Test हुक स्थापित करें। उदाहरण (परीक्षण सूट सूचना फ़ंक्शन का उपयोग करके):

suite() ->
    [{ct_hooks, [{cth_conn_log, [{conn_mod(),hook_options()}]}]}].

conn_mod() कनेक्शन प्रोटोकॉल को लागू करने वाले Common Test मॉड्यूल का नाम है, जो कि ct_telnet

cth_conn_log हुक एक अलग पाठ फ़ाइल में टेलनेट डेटा के बिना लॉगिंग के कार्य करता है। सर्वर से भेजे गए किसी भी डेटा सहित सभी टेलनेट संचार को कैप्चर और प्रिंट किया जाता है। इस पाठ फ़ाइल का लिंक परीक्षण केस HTML लॉग के शीर्ष पर स्थित है।

डिफ़ॉल्ट रूप से, सभी टेलनेट कनेक्शनों के लिए डेटा एक सामान्य फ़ाइल ( default नाम) में लॉग इन किया जाता है, जो गड़बड़ हो सकता है, उदाहरण के लिए, यदि कई टेलनेट सत्र समानांतर में चल रहे हैं। इसलिए प्रत्येक कनेक्शन के लिए एक अलग लॉग फ़ाइल बनाई जा सकती है। इसे कॉन्फ़िगर करने के लिए, हुक विकल्प hosts उपयोग करें और सुइट में उपयोग किए जाने वाले सर्वर / कनेक्शन के नामों को सूचीबद्ध करें। इस काम के लिए कनेक्शन का नाम होना चाहिए (देखें ct_telnet:open/1,2,3,4 )।

cth_conn_log व्यवहार को बदलने के लिए हुक विकल्प log_type का उपयोग किया जा सकता है। इस विकल्प का डिफ़ॉल्ट मान raw , जिसके परिणामस्वरूप ऊपर वर्णित व्यवहार होता है। यदि मान html सेट है, तो सभी टेलनेट संचार परीक्षण केस HTML लॉग के बजाय मुद्रित होता है।

वर्णित सभी cth_conn_log हुक विकल्पों को कॉन्फ़िगरेशन चर ct_conn_log साथ कॉन्फ़िगरेशन फ़ाइल में भी निर्दिष्ट किया जा सकता है।

उदाहरण:

{ct_conn_log, [{ct_telnet,[{log_type,raw},
                           {hosts,[key_or_name()]}]}]}
ध्यान दें

कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट हुक विकल्प परीक्षण सूट में किसी भी हार्ड-कोडेड हुक विकल्पों को अधिलेखित करते हैं।

लॉगिंग उदाहरण:

निम्न ct_hooks स्टेटमेंट में टेलनेट ट्रैफ़िक की छपाई के लिए कनेक्शन ct_hooks 1 और ct_hooks लिए अलग-अलग लॉग की छपाई होती है। डिफ़ॉल्ट टेलनेट लॉग में किसी अन्य कनेक्शन के लिए ट्रैफ़िक लॉग किया गया है।

suite() ->
    [{ct_hooks,
      [{cth_conn_log, [{ct_telnet,[{hosts,[server1,server2]}]}]}]}].

जैसा कि पहले बताया गया है, यह विनिर्देश एक विन्यास फाइल में निम्नलिखित की तरह एक प्रविष्टि द्वारा प्रदान किया जा सकता है:

{ct_conn_log, [{ct_telnet,[{hosts,[server1,server2]}]}]}.

इस मामले में परीक्षण सूट में ct_hooks विवरण निम्नानुसार देखा जा सकता है:

suite() ->
    [{ct_hooks, [{cth_conn_log, []}]}].

जानकारी का प्रकार

connection() = handle() | {target_name(), connection_type()} | target_name()

target_name() , मॉड्यूल ct देखें।

connection_type() = telnet | ts1 | ts2
handle() = handle()

एक विशिष्ट टेलनेट कनेक्शन के लिए संभाल, मॉड्यूल ct देखें।

prompt_regexp() = string()

एक विशिष्ट लक्ष्य प्रकार के लिए सभी संभावित संकेतों का मिलान करने वाली नियमित अभिव्यक्ति। regexp में कोई समूह नहीं होना चाहिए, जो कि मेल खाते समय, re:run/3 (STDLIB में) एक एकल तत्व के साथ एक सूची वापस करना होगा।

निर्यात

बंद (कनेक्शन) -> ठीक है | {त्रुटि, कारण}

प्रकार

टेलनेट कनेक्शन को बंद कर देता है और इसे प्रबंधित करने की प्रक्रिया को रोक देता है।

एक कनेक्शन लक्ष्य नाम और / या एक हैंडल के साथ जुड़ा हो सकता है। यदि Connection में कोई संबद्ध लक्ष्य नाम नहीं है, तो इसे केवल हैंडल मान के साथ बंद किया जा सकता है (देखें ct_telnet:open/4 )।

cmd (कनेक्शन, सेमी) -> {ठीक है, डेटा} | {त्रुटि, कारण}

ct_telnet:cmd(Connection, Cmd, []) बराबर ct_telnet:cmd(Connection, Cmd, [])

cmd (कनेक्शन, सेमी, ऑप्स) -> {ठीक है, डेटा} | {त्रुटि, कारण}

प्रकार

टेलनेट के माध्यम से एक कमांड भेजता है और शीघ्र प्रतीक्षा करता है।

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

ऑप्शन timeout निर्दिष्ट करता है कि क्लाइंट को कब तक इंतजार करना चाहिए। यदि समय समाप्त हो जाता है, तो फ़ंक्शन {error,timeout} लौटता है। कमांड टाइमआउट के लिए डिफ़ॉल्ट मान के बारे में जानकारी के लिए, इस मॉड्यूल की शुरुआत में list of default values की list of default values देखें।

cmdf (कनेक्शन, CmdFormat, Args) -> {ठीक है, डेटा} | {त्रुटि, कारण}

ct_telnet:cmdf(Connection, CmdFormat, Args, []) समतुल्य ct_telnet:cmdf(Connection, CmdFormat, Args, [])

cmdf (कनेक्शन, CmdFormat, Args, Opts) -> {ठीक है, डेटा} | {त्रुटि, कारण}

प्रकार

एक टेलनेट कमांड भेजता है और शीघ्रता से इंतजार करता है (कमांड बनाने के लिए एक प्रारूप स्ट्रिंग और तर्कों की सूची का उपयोग करता है)।

विवरण के लिए, ct_telnet:cmd/3

उम्मीद (कनेक्शन, पैटर्न) -> शब्द ()

ct_telnet:expect(Connections, Patterns, []) समतुल्य ct_telnet:expect(Connections, Patterns, [])

अपेक्षा (कनेक्शन, पैटर्न, ऑप्स) -> {ठीक है, मैच} | {ठीक है, माचिस की तीली, हैलटेन} | {त्रुटि, कारण}

प्रकार

टेलनेट से डेटा प्राप्त करता है और अपेक्षित पैटर्न की प्रतीक्षा करता है।

Pattern एक POSIX नियमित अभिव्यक्ति हो सकती है। फ़ंक्शन तब वापस आता है जब एक पैटर्न सफलतापूर्वक मेल खाता है (कम से कम एक, कई पैटर्न के मामले में)।

RxMatch मिलान किए गए तारों की एक सूची है। यह निम्नानुसार दिखता है [FullMatch, SubMatch1, SubMatch2, ...] , जहां FullMatch पूरे नियमित अभिव्यक्ति द्वारा मिलान किया गया स्ट्रिंग है, और SubMatchN स्ट्रिंग है जो SubMatchN नंबर N मेल खाती है। नियमित अभिव्यक्ति में '(' ')' साथ Subexpressions को दर्शाया जाता है।

यदि किसी Tag को निर्दिष्ट किया जाता है, तो लौटाए गए Match में मिलान Tag भी शामिल होता है। अन्यथा, केवल RxMatch वापस आ जाता है।

विकल्प:

idle_timeout

इंगित करता है कि यदि टेलनेट क्लाइंट निष्क्रिय है (यदि कोई डेटा प्राप्त नहीं हुआ है) IdleTimeout मिलीसेकंड से अधिक होने पर फ़ंक्शन वापस लौटना चाहिए। डिफ़ॉल्ट समय-आउट 10 सेकंड है।

total_timeout

पूरी expect ऑपरेशन के लिए एक समय सीमा निर्धारित करता है। TotalTimeout मिलीसेकंड के बाद, {error,timeout} वापस आ जाता है। डिफ़ॉल्ट infinity (यानी, कोई समय सीमा नहीं)।

ignore_prompt | no_prompt_check

> प्रॉम्प्ट प्राप्त होने पर फ़ंक्शन लौटता है, भले ही कोई पैटर्न अभी तक मिलान नहीं किया गया है, और {error,{prompt,Prompt}} वापस आ गया है। हालाँकि, इस व्यवहार को विकल्प ignore_prompt या विकल्प no_prompt_check साथ संशोधित किया जा सकता है, जो बताता है expect केवल तभी मिल सकता है जब कोई मैच मिलता है या टाइम-आउट के बाद।

ignore_prompt

ct_telnet मिले किसी भी संकेत को अनदेखा करता है। यह विकल्प उपयोगी है यदि सर्वर द्वारा भेजे गए डेटा में एक पैटर्न मिलान प्रॉम्प्ट regexp शामिल हो सकता है (जैसा कि TargedMod:get_prompt_regexp/0 ) द्वारा लौटाया गया है, लेकिन फ़ंक्शन के वापस लौटने का कारण नहीं है।

no_prompt_check

ct_telnet किसी प्रॉम्प्ट की खोज बिल्कुल नहीं करता है। यह उपयोगी है यदि, उदाहरण के लिए, Pattern ही प्रॉम्प्ट से मेल खाता है।

wait_for_prompt

लौटने से पहले संकेत स्ट्रिंग प्राप्त होने तक प्रतीक्षा करने के लिए ct_telnet करता है ct_telnet (भले ही एक पैटर्न पहले से मिलान हो चुका हो)। यह कॉलिंग expect(Conn, Patterns++[{prompt,Prompt}], [sequence|Opts]) बराबर है। ध्यान दें कि विकल्प idle_timeout और idle_timeout प्रॉम्प्ट के लिए प्रतीक्षा के संचालन को निरस्त कर सकता है।

repeat | repeat, N

पैटर्न (s) को कई बार मिलान किया जाना चाहिए। यदि N को निर्दिष्ट किया जाता है, तो पैटर्न (s) N से मेल खाते हैं, और फ़ंक्शन HaltReason = done । इस विकल्प को एक या एक से अधिक HaltPatterns द्वारा बाधित किया जा सकता है। MatchList को हमेशा लौटाया जाता है, यानी केवल एक Match बजाय Match सूची। इसके अलावा HaltReason वापस आ गया है।

sequence

सभी पैटर्न एक क्रम में मेल खाने चाहिए। जब तक सभी पैटर्न का मिलान नहीं हो जाता तब तक एक मैच का समापन नहीं किया जाता है। इस विकल्प को एक या एक से अधिक HaltPatterns द्वारा बाधित किया जा सकता है। MatchList को हमेशा लौटाया जाता है, यानी केवल एक Match बजाय Match सूची। इसके अलावा HaltReason वापस आ गया है।

उदाहरण 1:

expect(Connection,[{abc,"ABC"},{xyz,"XYZ"}],[sequence,{halt,[{nnn,"NNN"}]}])

पहले यह "ABC" , और फिर "XYZ" से मेल खाने की कोशिश करता है, लेकिन अगर "NNN" दिखाई देता है, तो फ़ंक्शन {error,{nnn,["NNN"]}} लौटाता है। यदि दोनों "ABC" और "XYZ" का मिलान किया जाता है, तो फ़ंक्शन {ok,[AbcMatch,XyzMatch]}

उदाहरण 2:

expect(Connection,[{abc,"ABC"},{xyz,"XYZ"}],[{repeat,2},{halt,[{nnn,"NNN"}]}])

यह दो बार "ABC" या "XYZ" से मेल खाने की कोशिश करता है। यदि "NNN" दिखाई देता है, तो फ़ंक्शन HaltReason = {nnn,["NNN"]} लौटता है।

कई बार अनुक्रम repeat विकल्प repeat और sequence को जोड़ा जा सकता है।

get_data (कनेक्शन) -> {ठीक है, डेटा} | {त्रुटि, कारण}

प्रकार

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

मतदान सुविधा को कॉन्फ़िगरेशन मान poll_limit और poll_interval द्वारा नियंत्रित किया जाता है और डिफ़ॉल्ट रूप से अक्षम किया जाता है। इसका मतलब यह है कि फ़ंक्शन तुरंत प्राप्त सभी पूर्ण स्ट्रिंग्स को वापस कर देता है और बाद में get_data कॉल के लिए एक शेष गैर-समाप्त स्ट्रिंग बचाता है।

open (नाम) -> {ठीक है, हैंडल} | {त्रुटि, कारण}

ct_telnet:open(Name, telnet) समतुल्य ct_telnet:open(Name, telnet)

open (नाम, संबंध) -> {ठीक है, हैंडल} | {त्रुटि, कारण}

प्रकार

निर्दिष्ट लक्ष्य होस्ट के लिए टेलनेट कनेक्शन खोलता है।

खुला (KeyOrName, ConnType, TargetMod) -> {ठीक है, हैंडल} | {त्रुटि, कारण}

ct_telnet:open/4 बराबर ct_telnet:open/4

खुला (KeyOrName, ConnType, TargetMod, Extra) -> {ठीक है, हैंडल} | {त्रुटि, कारण}

प्रकार

निर्दिष्ट लक्ष्य होस्ट के लिए टेलनेट कनेक्शन खोलता है।

कॉन्फ़िगरेशन फ़ाइल में लक्ष्य डेटा मौजूद होना चाहिए। कनेक्शन Name और / या लौटाए गए Handle जुड़ा हो सकता है। लक्ष्य के लिए एक नाम आवंटित करने के लिए, निम्नलिखित विकल्पों में से एक का उपयोग करें:

  • ct:require/2 एक परीक्षण मामले में ct:require/2

  • सूट सूचना समारोह ( suite/0 ) में एक बयान की require

  • एक परीक्षण मामले की जानकारी समारोह में एक बयान की require है

यदि आप चाहते हैं कि कनेक्शन केवल Handle जुड़ा हो (यदि आप, उदाहरण के लिए, होस्ट से कई कनेक्शन खोलने की आवश्यकता है), तो लक्ष्य निर्दिष्ट करने के लिए, Key , कॉन्फ़िगरेशन चर नाम का उपयोग करें। ध्यान दें कि संबंधित लक्ष्य नाम के बिना एक कनेक्शन केवल Handle मान के साथ बंद किया जा सकता है।

TargetMod एक ऐसा मॉड्यूल है connect(Ip, Port, KeepAlive, Extra) जो निर्दिष्ट get_prompt_regexp() उदाहरण के लिए, unix_telnet ) के लिए फ़ंक्शंस connect(Ip, Port, KeepAlive, Extra) और get_prompt_regexp() को unix_telnet

target_name() , मॉड्यूल ct देखें।

ct:require/2 भी देखें ct:require/2

send (कनेक्शन, Cmd) -> ठीक है | {त्रुटि, कारण}

ct_telnet:send(Connection, Cmd, []) समतुल्य ct_telnet:send(Connection, Cmd, [])

send (कनेक्शन, सीएमडी, ऑप्स) -> ठीक | {त्रुटि, कारण}

प्रकार

एक टेलनेट कमांड भेजता है और तुरंत लौटता है।

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

कमांड से परिणामी आउटपुट को ct_telnet:get_data/2 या ct_telnet:expect/2,3 साथ पढ़ा जा सकता है ct_telnet:expect/2,3

sendf (कनेक्शन, CmdFormat, Args) -> ठीक | {त्रुटि, कारण}

ct_telnet:sendf(Connection, CmdFormat, Args, []) समतुल्य ct_telnet:sendf(Connection, CmdFormat, Args, [])

sendf (कनेक्शन, CmdFormat, Args, Opts) -> ठीक है | {त्रुटि, कारण}

प्रकार

टेलनेट कमांड भेजता है और तुरंत लौटता है (कमांड बनाने के लिए एक प्रारूप स्ट्रिंग और तर्कों की सूची का उपयोग करता है)।

यह भी देखें

unix_telnet