�PNG  IHDR����Q�gAMA�� �a cHRMz&�����u0�`:�p��Q<�bKGD�������gmIDATx���w�U���ﹻ�& �^C��X(�����J I@� ���"% (** B�X� �+*�i��"]j(IH�{~�R)��[��~��>h��{�}g�y�)I�$I��j��� ������.I�$I�$�ʊ�y@�}x�.�: �$I�$I��i}��V�Z�����PC)I�$I��F� ����^��0ʐJ�$I�$�Q^���}{�"���r�=��OzI��$gR�ZeC.�IO����vH eK��X� �����$IM�px��sk�.��쒷/��&���r�[޳����<���v|�� ��.I���~�)@������$�up��dY�R�����a�$I �|�M�.�e ��Jaֶ�pS�Y�R��6j��>h�%IR��ز�� �i�f&���u�J)������M�����$I vL���i���=�H;�7UJ�,�]�,X��$I��1��AҒ�J����$ X�Y� XzI��@G����N��ҥR���T)E��@��;��]K*�M�w;#�5_�wO�n~\ DC&�$(A�5 �R�R��FkvIR���}�l��!�RytRl;��~^Ƿ�Jj� �اy�뷦BZ��Jr����&ӥ�8�P�j��w~�vn�����v ���X���^�(I;�4�R=�P[�3]J�,�]ȏ�~��:�3�?��[��� ��a��&e)`�e*����P[�4]�T��=Cq�6�R[ ~ޤ����r�XR Հg(�t�_HZ�-Hg �M�$�ãm�L5�R� �u��k�*`%C-�E6/����%[�t X.{��8�P9Z�������.vk����XŐKj����gKZ��Hg�(����aK9ڦ��mKj��Ѻm�_ \�#�$5�,)- � �61eJ�,��5m|� ��r�'��=��� ��&ڡd���%-]J �on�� X���m|�{ ��R�Ҟ����e $eڧY X��Y�����rԮ-a�7�RK�6h���>n$5A�V�ڴ�i��*�ֆ�K)���mѦ���tm�r�1p| �q:흺,)O�����i��*�ֺ�K)���ܬ�֦����K-5�r�3�>0ԔHj��Jئ�EZ��j�,%��r�e��~�/��z��%j�V��M��ڸ�mr��t)��3]J�,���T ��K֦O�vԒg��i�i��*�����bK�i�NO~�%�P��W���0=�d��i�i�������2�t�J9��J����ݕ�{�7�"I P��9�JK�Tb�u,%��r���"�6�RKU��}�Ij�2����HK�Z�XJ�,妝�� X��Y�����rP��� ެ�2�4�c��%i��^���IK|.H�,%��r�b���:XR�l��1X��4Pe/`����x��&����P��8�Pj��28��M��z���s��x���2���r�\���zR��P�z�4J����}�y���P[g=�L)��� .Q[�6Rj�Wgp ��FI�H�*-`I�����M�RaK9T��X��c�q�����*I� y���[j��E>cw%��gL�R���ԕi�F�Cj�-��ď�a`������#e~���I�� j�,%��r�,)?[gp �FI˨���mn��WX#��>mʔ X�A��� �DZf9,�nKҲz�����I��Z�XJ�,�L#��k�i��P�z�4JZF�����,�I,`���61%�2s �$���,�VO��Ϛ2��/U��FJ�fy��7����K�> X�+�6� S�TX����Ie�����JI���Lz�M�fKm ��L�RaK9�%|��4p9L�w�JI��!`N����sia���zĔ)������%-� X��M���q�>�pk�$-$�Q���2����x#�N� ؎�-�QR��}ᶦHZ�ډ��)�J�,�l#��i@y�n3������L��N`���;�nڔ X�����u����X5��p��F)��m|��^�0(��>B�H���F9(c�զE��er��JI rg��7 ��4I@z�0\�JI��������i�䵙���RR��0�s;�$�s6eJ�,�`n �䂦���0�a�)S)�A������ ���1eJ�,堌#�6�35R��I�gpN��Hu������TH���_S���ԕqV�����e `� ��&S)���>�p;S$魁eKI����uX��`I�����4��춒�o}`m�$1"��:�PI���<[�v9�^�\p��TJj�r�iRŭ ��P{#�{R2,`)e-`mgj�~�1�ϣ�L��Kam�7�&U\j�/�3mJ�,�`F��;M��'�䱀�� .KR#��)y�h�Tq�;p���cK9(���q!w�?����u�RR,n.yw�*UXj#�\�]ɱ���(q�v2=R���q����f����B#i��Jm�m�L����<]�Y����͙�#�$5� ��u�TU�7��Ӧ�X�R+q�,`I}����qL�����'���`��6�K�ͷ�6���r�,�]����0S$-���� ��[RKR3���o��iRE����|�nӦ�X�R.�(i�:�L��D�L��TJj�Y��%o�:����)�����6���r�x���zҒ��q��TJj��h㞦I���.�$Y�R.ʼ�n�GZ�\ֿ��f:%5�5 ��I�˼!�6����dK�x��m��4E�"mG�_�� �s? �.e*��?L�RfK9��%�����q�#�uh$�)�i���3U�����L�RfK9yx��m܌b�j�����8��4���$�i��1U��^@Wbm��4uJ�,�����Ҫ�A�>���_Ij�?1�v�3�2����[�gL�R��D��9�6�o�Ta�R���׿��N7%�����L�2�� NT�,`)7�&�Ɲ��L�*꽙��yp���_$���M�2�#�A�����S�,`)7�$r��k�TA���29�_���Iy�e"�|/0�t)�$�n X�T2���`Y���J���;�6��J�x"�����.e�<�`�����$)� P�I$��5�V4]���29���SRI>�~�=@j�]��l�p�2`K9Jaai�^" Ԋ��29�O�RI%��:X�V5]J��m��N9���]�H;1U���C39���NI%���Xe78�t)a��;���O��i Ҙ�>X�t�"~G>�_mn:%���|~ޅ_�+]�$�o���)�@��ǀ{hgN;�IK�6�G&�rp�)�T2�i�୦K�Ju���v*���T��=�T��O�SV�>(��~D�>d�����m�,I*��Ɛ�:���R�#��ۙNI%��D>G��.n��$�o��;�+#��R�R��!��.e�U��˽���TRI�2��8�t)1L��WϚ>IJ�a3�oF��b��u&���:�tJ*��(F7��y�0�Z�R ^�p���'Ii� ����L�24x�| X��RI%�ۄ>S1]J�y��[z��L�$�adB7��.eh4��%���%�누>W�E���Tf+3�����IR:�I�3Xה)3אO�ۦSR�O'�ٺ�)S�}"��q�O��r[B7�ϙ.edG�)^E���TR"R��t��R�ݜh���0}������<�S����ɧx�.6,)�&���)SI�p��j�'I��?���A�L�"���L����.\TZV�N���!�'I�Y.��pAS����5}� �TRbNL�3��”�d�����b�e��)��4]��Mg/S���Z{ni����,)=k����Д�d��p��ǦO��uLb7�ߛ2%lO�}u�)���K��]le�T�P��j�eS(I�Z���ִ��R�^eJ%%*�/\ Ke�̈́�-O�M�$����|.5eJ��o�s)^]oJ%%,�㚃R� <�p��LS��� �*����`GӦ�tdt<�5���o'��/�6�٧�� _��BIJ�kH��_�6%d ���rQ�b�gZ%%n�ڍ9o1mj�U�g���JR>�L�F�VӦD�B^k_���J�Dj��\����=�L���S(I������v─a���T�eZ%e�U����A�M-�0;�~˃@�i��|l�� �@S���4y���7��2��>���sX-vA�}�ϛBI���!ݎߨ����W�l�*)3{'�Y|�iS�lEڻ(��5�����K��t��SI�$��Uv0��2���,~��ԩ~�x��;�P��4��ց��C�r�O%ty�n4��25:���KM��l�D� ^���4JR������xS��ه�F_}شJ�T�S��6uj�+ﷸk�$e���Z�O%�G�*^�V2�����u3E�Mj�3��k%)ok��I]d�T����)�UR�K���DS� �7�~�m@�TJR�~�荪�f�T"�֛L�� �\���s��M��� �-0��T �K�f�J��z+��n�إK�r� �L�����&j��(��)�[�E&I����� ߴ>e �FW�_�kJR�|!���O�:5�/2跌3��T-�'|�zX�� r�yp0��J����S ~^�F�>-�2�< �`*%�ZFP�)����bS��n"���L�� :)���+pʷf(pO���3��TMW$~����>@~ū:����TA�IsV�1}�S2�<���%��ޟ�M�?@�iT ,E�ū�oz%i�~��g�|`wS(�]�oȤ��8��)�$�� �� ntu`өe�`6y�Pl� Iz�MI{�ʣ�z����ʨ�� �)IZ�2��= ld:5+���請M�$-ї���;�U�>_���g��sY��$Á����N�5��W���z�W�fIZ��)�-��y�u�XI�fp���~S*IZ��dt�;�t�>K�ū��KR�|$���#Lc�Ԁ+2�\�;kJ��`]�Y���ǔ��M1B)��U�bG"IRߊ���<x����ܾ��ӔJ�������0�Z����=��'�Y��嵤����� Le�v�e�g��)�$��z���n����V-º����^�3Ւ�o�f��#0�Tfk�^�Z�s[�*I꯳3{���)�ˬ����W�4Ւ4 �Odp��bZ��R���S��|�*I� �����5��5�#��"�&�-IvT&��/��윚Ye:��i�$ �9��{�Lk�u�R���e�[��I~�_�\��ؠ%�>�GL�$iY�8 �9ܕ��"�S���`kS.I�l���C;Ҏ4���x&�>�u_0J��Lr����<��J�2�(^��$5��L� s�=Mg�V� �~�,Ij�u��>�� 7��r2�)^=G���$�1:��3�G< �`J�3�~�&IR%�� 6���T�x�/�rIj���3�O< �ʔ&#f�_yX��J�i�ގN��Sz;�� T�x�(��i���8%���#���4 �~�AS+Ij��e���r�I�U�rIj�����3�62��v8��8�5�+Ij�A�h�K__5���X��%�n�V%Iͳ-y��|7��XV��2��v4���fzo��_6��8���"�S/I-qbf��;� Lk��F�)K���SM�$���� Ms�>K� W�N���V����}�^`��-�큧3����2Œ�Vؙ�G��d��u�,^�^m�%��6���~��N�n�&�͓��3Œ�V�Z����MsRpfE�W���%I�wd���ǀ�Lm[��7���W&�bIR��L�@Q�|�)*�� ����i ImsI�����MmKm�y��V`�i�$��G+R� 0�t�V'����!���V�)֏���28����v���U�7͒�v���H����ꦼt���x�ꗞ�T ;S���}��7�M�f���+��fIR���H��N��ZUk�U�x5��SA�Jㄌ�9��Mq��μ���AIRi|�j�5��)o����*^���'<$�T����w���I�1��hE�U�^c�_�j�?���Е$%d`z� �c�y�f��,X���O IJ�nTg����A�� �����U�XRD��������� ���}�������{�H�}��^�S,P5��V��2���\����Xx`p�Z����|Y�k:����$e�� ��~ ��@nW�L�.j�+��ϝ���Y��b퇪��bZ� �BV�u�)�u�������/IJ_ �1�[�p.p60�bC�� >|X����9�1P�:��N\�!�5�qUB}5�a5ja `ub��c�VxYt1N�0�Z����z���l4����]7­gKj�]�?�4ϻ� ���*���[��b��g$)+À���*x쳀ogO$~,5� �ز���U��S�����9���� lq3�+5�mgw@��n�p1��sso Ӻ=����|�N6 /�g(�Wv7U��;��zωM=��wk�,0���u��T��g�_��`_�P`�uz?�2�yI��!b��`�k���ĸSo��+Q���x%!\��ο����e����|�އ���ԁK��S-s6��pu���_����(ֿ�$�i+��+�T8=�e�Y;��� �צ��P�+p��h�x��WQ���v���*���|p1��. ��ά. XRk�IQ�Y�P,���d�r�Z�� |����� ��������B�%������w��P|�S5`��~́@�i�޾��� E�;��Չaw{o'�Q��?%�iL{u D��?���������N1��B��D������!�o��w�����PHRe��FZ�*�� ���k�_-~����{����E9�b-��~P�`��f��E{AܶB�J�A�FO��� wx6��R�ox�5 K5����=�W����we�������hS8 (��J���C���l�J���~ p+���F���i�;ŗo+��:�bD�#g(��C��"�wA^�� r.�F�8L;�dzd�IH�U�X��݆�Ϟ�X�g� �)I�F����q��e�m��%I�4�d�j&pp�T�{���'{�HO���x�( Rk���6^C�٫����O.�)�3�:s(��۳(Z�?~ٻ8�9�zmT"�PL�tw䥈��5��&b<8GZ-�Y��&�K�?e8,`I��6���e�����(֍x�b8�3 � `���r�����zX�j��)F�=l($I�j� �2*�(F�?h(/9ik:��I`m#�p3�Mg���L�aKj�c�/U��#�n5����S�# �������m(^)=y=đ�x8Ŭ����I���[U]����~S�цA�4�p���$-F �i(��R�,�7C�x�;X��=�c����I��>���{���Km�\ �o(T��v�2������v�x�2q�i����iDJ�N�,���Ҏ����!1f� �5quB�j��1��!�8 �r���D�Fd(���!���W���Ql��,g�S��k����L��1Bx��g'�'�՞�^���ǘ;�p����Q ���P(c���_ IRu����j�g(�W�z ����b�s�#�P�­rz�>���� k�� c&nB=�q+��ؔX���n#r5����)co���*Ũ�+G��?7��<�� |�P�����Q��ӣ'�G�����`uO�d>%M�ct�z�#�� Ԫ�����ڞ�&�7��CaQ��~N�'��-P�.�W`Oedp0�3C!IZc�I�AMP��U�ۀ5�J�<��\u~+�{�9�(Fb�b���y�A�e�B����hOS���ܳ�1� b��È���T�#��ŠyDžs�����,`5�}��D���C�-�`��̞%r&�ڙa��8�7Q����W����W����p6e7� ��Rϫ/�o����Y� ꇅ N��ܶ�ը��tc��!��L���A ���T�7�V4�J�sū� I-�0����P��x�z7�QN�F���_�i����Z�g�úW�k�G���83� ���0e�Wr9 X����]㾮݁#���Jˢ C�}0��=3�ݱ��tB��i�]�_ ��&�{�{[/�o[�~ \q�鯜�0��0��٩���|��cD��3�=4��B_b� ���RY��b$ó�BR���sf�&������l�L�X#M*��C����_�L܄:gx�)WΘs���GSb���u��L ���rF$9�'�;\4�Ɍ�q�'�n�[%p.�Q`�������u ��h���N�b`eCQyQ|���l�_���C>L���b꟟3h��Sb�� �#��x��N��xS���������s^�� 88�|�Mz�)��}:�](vbۢ�amŖ࿥� ��0)Q����7���@�0���=?^k(*�J�����}�3ib�kF�n H�jB׻���NO���� �z�� �x}�7p 0�t��f����D����X�.lw��gȔ��h�Ծ�Ų� }6�g� E� |�Lk��LZ���t��eu+=���q���\I�v0쮑�)��Q�ٵpH8�/2?Σ�o�>�J�vpp��h�������o~�f>%bM��M���}���\�//��":�PT��c(v���9v���!��g�ո��Q ��)��U�fV��G��+!� ��35{=�x\�2�+��k�i,y$���~A1��iC�6#)v��C�5�^>�+gǵ�@1�Hy٪7����u;p ps�ϰ�u���/S�� <��aʸ����Gu't�D1�ԝI��<��p��g|����6�j��'p:�tպ�h��X�{�o(7v],��*�}��6�a_����<�u`��Ȯ�r.E�;ˑ�q�io�p�R��"������26�2E�8j�� ]����U��鿍ǜ�v���D��,2���վ�8ϫ�:�e/^AQ����T�H{�WgRl���̊���2Yx���"1�Q�> �wX�Rk,O�]�Lܳ���~V<�����F���8��a��_g~�o.�XCD�?S�t���h���梫A�o�%���~K1ݵ��O1�LyZ�bJ�� E��Q���xpq�i�Cpv��a6��_�:�wejT����]����"����<��u`"���� 2>���o4��5rp"N5k��;�m���{���rZ�b������Φ${#)��`(��Ŵ�g�,;j���%�6�j���.�pyYT��?}-��kB������D���c3q����A`��N��WQ���ū2�0�/^A��Z�W%�N�Q��� ��MI�.��X#P��#����,^Eb�c&��?X�R tA�V�|Y���.�1����!�����؅�⨉ccww���>���i��v��l(J��T�~� �u`��ٵDm �q)���+���Ri�� x/�x��8cyFO�!�/���*�!/��&��,7�<.���N���,�������YDŽ�&ܑ�Q�F1�Bz��)F���P�ʛ�?5����d� �6`�����kQձ �λc�؎�%58�2��Y��&nD�_$Je4��>a��?��!� ��ͨ�|�Ȏ�WZ��S�s��v���8� �j����(�I��&��y�j� �Jb5��m��?��H������Wp��=����g}�G��3��#�|I��,5v珿�] H~�R3�@B��������[☉9Ox~��oMy�=J���;�xUVoj�� �b�U�s�l_��35�t-�(Ճɼ�RB7�U!�q��c��+�x�4�H�_�Q�o֮$[���GO<��4`��&č�\GO�c[�.[*�A�f%m��G/� ň�M�/�r ��W�/Nw~B1U3������J�?��P&���Y�� �)`�ѓ����Z�����1���p]�^l“��W#)lWZ�i����l�U�Q�u`��-����m|xĐ,������_�ƪ|9i:�_��{*(3G�ѧ}�Uo�D+�>m_�?V��Pۅ�15���&}2�|���/p�IOʵ�>���� G�Z9�cmíت�mnz��)yߐb���D�������� �>e}:�)� �r|@�R5q�V�S�����A�10�C%�E�_��'^�8c��������R��7O;�6�[���eKeP�������G������ϦX7�j���b}��OT�GO^j��n*媓����7n����GMC�� � ���t,�k31�R�b �(v�yܴ�ʭ�!��iTh8~�ZY�Z�p��(q��s���RL ?�b���}����c�Ũ�ʊGO^���!��rP�JO��1��5�MJ[��c&~������Z`"��ѓޔ����H1���C&����^|��Ш|�rʼ,�A�wĴ?�����b��5)�t��L��U��)F�|�� �&��g٣O]���oqSU����j���y(��x<��Ϳ3 ���.���FS�k���oYg�2� \_#w��j�{u'r�Q������>���o���;���%n�|�F�*�O�_��L�"�e�9um��Dds�����?.��fu�u����Qb��IW�z |4\0� s�b;�O�v��xOS�s�; G%����T4g��FR�u�rj���(֍ڑb �u�ԖK�D���u��1MK{���1^ q;�� �C=�6\8��F��R��艇�!���%\Y�Ô�U| �88�m��)֓��Nc��L�ve�� C�6z;��o&�X x5�9�:q���6�1�Z��(T����7���>C?�g�c�ļ�x�ѐ�� Z� ���o�o-�0�8j�ہ �x�,�`���'��� ��Ҕ���Oc��Rl��f��~���`�����jj�"�.N�v+���sM������_��]������Z�k��� �g( UOP���������y�εx%�pU����h�2�������(���@��il0���ݽ��QXxp�px-�N�S��( W�O+�轾 n��Fߢ����3M��<;z�)��FBZ�j����c�i��u�/�Q�oF�� �7R�¥ Z��F�L�F�~��#����ȣ��ߨ^<쩡�ݛк���v�џ)��)���M��E>ώ�x4�m#!-�m���!L;vv#~Y[��đ��K�����m����x�9.[,��U����FS �����C���VkZ ���+���ߟ�r�Y٧��IZd/�io�i$�%��͝ب_ֶX�3���ܫ��hNU �� Z����Z�g�k�=���]��=������b���b��JS[�w��j�U(��)���*I =ώ:}-蹞�l�Uj�:��1��}����M�W��m�=̛���� _�� ¾,8��{__�����m{_�P��V���K^n3�e����sw5�ӫh�#�$-�q=�A̟> ,^I}P�^�J$�qY~Q[ Xq���9�<�r�d�sߏǜs�#������%/���y����kKZ�������b��?� S�k�tc�񫝶L���&I ���W!�b �>{#�&�T.^����G��Vj�_���_R��K�p����n,b=`�ż����Y@�^՝��;z�{p�aV��Kk����QXj�/�)y� ��TI�c&F�;FB�G�7w����g� ZZD�G��!����x�� �r_�t��Ƣ!�}�i�/�V��=M����/��#��n��B8 Xx�Ы ^�@�CR�<{䤭����Y��CN��)�e���K��OSƟa $��&�g[i3�.C�6x�rOc���8�TI���;�o�� ��hH6�P�&L{�@�q��6�[���� �G��zp�^���71�j��(�l�`�J�}]���e6�X����☉#͕� ���׈$A�B1�Vj��h㭦IRs��qFBj�w�Q_7�Xk��>y"������N=�M�B0� ��,�C #�o6MR��c���0��|�$�)�ف����"1����!i���xY<���B��9mx�� ��`���,��t�A�>)5ػ�Q���?j��Q�?�cn�>Y�Z�e�� �Tis���v���h�#�� �GMމȇ���p�:���ԴVuږ�8ɼH��]C.���5C!UV;F`m�b��Bk��� ��L�TM�vP���ʍϤj�?��ԯ/Q�r1���N�B`9s"����s�� �TYs����z��� ��&�9S%U԰�> �{��<�ؿ���SM���xB��|H�\3�@!U�|�� �k']������$U�+>��� |�HHM����Lޢ�?��V9i�D!-�@��x�� �TI���î�%�6Z��*��9X�@HMW#�?��n�N� ,o�e6�?tQw��ڱ�.�]-����y����'�:mW�0#!�J82qF�jH -`�ѓ�&��M��0����u� Uγmxϵ��^-��_�\�]����)@0R���t.8�/?ٰ�C��Y]�x���}=sD3�o��j�ަ���Ы�N���uS%U��}Ԥw��HH�>ڗ�jܷ_3gN �����q7�[q���2�l���a���*����A�r���Ǔ��Ԗ+p�8���/��R��GM�� ]j�a����c�d(�JhWko�6��ڎb�j�]i���5���Bj�����3+�3�!\j��1�����U�Z���L��s��L�T�v8�HHmup<��U���\��GMމ�3�R+��w4R�����6�j� XW�M�T!��u(�*!��Pz�,����#���Sq���*�8?vww )kO���a��$�[&��?�*�bB�X� �@���%�����8�]�=���R�r)kO��w�0j��i��M�Tq�� ng$�2\�q�8f�:���e�N1�R�xr<��5 ������;��M��p^�@;��7]R��ꎾ�JtER�.�/(5�v3�R[�@=�h�l����?����l�@;���.���[]�Q*�Z\�4��"1P�'Y��w��x��# ���ǀg���{��5�i��_IUR���z�RɞsyS5q�E����=�@�Y���っ �����v�k��6 ��&��5�1E�o0�|�kp�c��#�j=`�D���WRU�����j̟���J'P� �����w2 �S� �v�:��p�g�3Rv�},�#�����8�b��Z~�&��(F�=�i�><�>gK�M���Jj����0�@H%��,����W�΃�7�R) "�>c�,����� x�ix������ј���^ ��aܖ>�H[�i.UI�Hc �U�1=y�W\���=��S*���G���R~�)AF���=�`�&�����2��h`�D�z���T��󑓶�����J+����?�W+}��C�%��P:|�0H���܆��}-�<;O����C[�~o.��$~��i�}��~�HQ�� �Tv�X������Έ�r=b}$��v����i�z�L��4�:�ȰT|4�~����*��!o�X�QR6��L�k+�#������t/g �lԁߖ����[��Jڶ_N$�k���������*"�.� ���x���s��xX���7jRVbA��A�ʯKҎ��U3����)�zS�NN �_�'��s�?f����)��6������X���!%s�s�A���kʱ>���qƷ�b ��h�g� %n���� �~p�1RE��GM���HH�=�������B�Jiy[<�5 ���ǁJҖ�����g�K���R��*�倳��e��~�HUy��)A���g,K)`�V�w6bRR:��q����L#\�r���cl��K��/�$�s�h�*$�� ������6�����덤�� ����KԖc� 3��Z�9��=�Ɣ�=o>�X � �Ώ�"1�� )a��`�S��JJ�6�k<��U�������-]�� b�m`��{r�y;����T���u��_GR5���*�%6�do�#XRg#���-!nl��$u�3��A�� L+Q{��9�x~�a-�|�H� �vbq[\�NJT%�]���rO8,��E�-F�����w)+?(Y{�Lz�n6����׀��?C������R�~�,)m�䎧�R�7���cww����qpW�ڳ=i.��U`Xf�F�b=�V��LJ��H^LI}��%�} ��|��w���� aG�$�,��^�R^�6 k2�^B�{7��t�������V�%@G�q� p�%R�zģN_ ��HHI[7�ֱ�>(��<�c e�{%kϊ����P�+��SL'�T�cM���J����WR���m ���ŏ�"�w)qc e�f�꒵i?��b7�b����(�'�"��2r%��������~�HUS�1���\<��(`�1�W����x��9�=�8HY9��m:X��1�8�b��g�����D1��u ���~|H��;K��-��U�ep�,,� C�1 RV.���M�R�5�άh����,�t��W�O8W���C�$ XRV�sQS]3G�J|�1��2����� [�v�M� ������:��k�#����~tH�3�0Rf-�����HYݺ-`I�9�%l�I��D�T�m\ ����S�{]��9�gO���ڒ�M���NCV\��G��*����2���J�R�Ũ;�R��ҏ^���ڽ�̱�mq�1E�u?�To�3I���)��y^��#�j�J�w���^�Ń�j��^�v����vl����B_��⋌�P�4x>0$�c>���K†A�ļ9s_V���jT��t0l�#������m��>E��-�,�,�x�,��-�W��)������سo&�9�6�R�E XR.6b���Xw�+)G���A�����E�v�L�)�͞K4�$p=�Ũ��i_ѱ�O�j��b�� HY����/���+@�θH9޼]�N�ԥ��%n�{����� �&zjT�?�� �Ty) s^�U��L�����lb�,�P�iTf�^���<À�]������� ��62R^V��7)S!nl�l��S�6~�͝�V�}�-=%*� ʻ>���G�� ���������D��nK��<��y��&>L����Py7'r=Hj���� ���9��V`[c"�*��^�8H��pc�����O�8�b�nU�`4���J��ȪA�Ƌ#��1_\ XϘH��PR���gi�k(�~G�~��0��D���A���A����_2�p�|�J�묭a����2���\N�C�r�]����M���_0 �^T��%e#����vD��^��%��x��y-n���}�-E�\�3�aS%�yN!�r_��{ �)s���A��w ���ڼp1pEAk�~v�<�:`'ӭ^�5 �����A�r���X�������OI驻��T �(��dk�)�_�\<��w���^��W�I��"�RFj3��V# ���M<,o�J��.H��#�\�SK���s]���� )��9> P��u�������A�*�B�Y�]����y�B�"�l�\�ey��� ��hH���*t��b�K)3��� IK�Z��򹞋X�jN�� �n� �*n>k�]��X�_��d�!�ry��BH� � ]��*R�� ��0(#'�7 ������%es9??��ښFC��,ՁQP��������j�����AR��J�\Ρw� �K��#��j���ah�g�w�;�2$�l*�)� ��%���Xq5�!U᢯�6Re] |�0����[�_�����_64�c�h�&�_}��i�L8K��Eg�Ҏ�7 M��/�\`|.p,�~`�a���=�BR?x�ܐrQ���8K� XR���2M�8�f ?�`s�gW�S%�"� ������Ԉ 7R%���$� N������}��?QL1|-э�ټwI�Z��%���pv�L���3Hk>,I����m�g�W���7{��E�� x�PHx�7�3R�����A�� ���@R�S�� CC���� �������!\ȟ���5I��XR^Z���xHл�$Q[��ŝ�40 (�>�+� �_C ���>���BR�t��<,T�r�T �������{���O�����/�H��+˟Pl6 I ���B)/�V���C��<6���a��2����~�����(�XwV4�g�n���XR� ϱ5�ǀHٻ?tw�똤Eyxp���{�#���WK��� �q����G%5���]�,���(�0ӈH����� HZ���])ג=K1j��&��G(FbM�@����)%�I` XR�����g ʔ�� KZ�G(v��P,�<`�[� K���n^ ��SJR���sAʠ�5xՅF`�0&R�b�V� ��t��x�:Ea�UE�/{�f��i�2;.I����A��wW8��/��t�T�x�A��GOo��N�?�G���}�l L�(���n�����`�Zv?���p�B��8K�_g�����I�+ܗ � #��i��?���ޙ�.��) p����$�u�tc �~DžfՈE�o3��l/)I-U�?a�ԅ�^��j�x�A�r����A�� ΧX��������}�DmZ@QLےbTXGd�.^|x�KHR{���|Ε�W_h]�� ���I��J`[�G9�{��)�.y�)�� ��<���D�*��zk�(ּ���Ya����O���8S����?��2-��� ������H13����#pK"���I`]`O� ��h�&=�S���F1Z�/Ie����D1R�W�a�"t'�x?!)Ou:��1 ��|��6��gt\s�����7�=�z_;�ؠ��>�0X Y��A1]q�p?�p�_���k+J*��Y�@HI>�^��?�g�t.06R�n ��,��`�� ��?)�;p pSF9����Z����X���L�����BJP�W���j���gQ|�&)7!�� Hj��Q��t���<| ؅��W�5 x �W��� �� HIz�Y���oV���M�G�P��� Hj��n`+�\�(d��N���W)F+I�rS�[���|��/a�����`K��|�ͻ�0Hj�{�R,���Q=��\� (F�}\�W�������R)A�g��SG`I��s�n���AR�=|�8�$}�G(v��C��$)s���� FBJ�?]�_�u XRv�ύ��6z�� �Ũ�G[��3��6-�T9�H��z��p����W�̞ú������� X�����g�큽�=�7C�u������fzI���$��)�k�i���^q��k��-) � ���0H*�N` �QZ��k�k]/���t���nn���sI�^Gu't=��7$�� Z;�{���8�^��jB��%� ��IItR�QS7�[�ϭ���3 �$�_���O�Q�J`7�!�]���W��"��W,)�����Iy �W��� �AJA�;K���WG��`IY�{8���k$I�$�^��%����9�.�^(`��N|���LJ�%�@�$I�}ֽp���=FB*�xN��=gI?Q{٥�4B)m���w �$I���gc~d��Z@G�9K��� X�?7)a�K�%�݅K�$IZ��-`I���p����C ������U��6�$I��\0��>!��9�k}��� Xa� ����II�S���0H�$I �H ?1R��.�Ч�j���:�4~R�w���@p�$I����r��A*�u��}��W�j�WFPJ����$I�➓/���6#!�� L�Ӿ��+ X36�x�8J �|+L;v���$I���o�4����3���0����1�R2�0��M� I�$-E}��@����,pS�^ޟR[���/����s¹'��0H�$IKyf��Ÿ���f�������VO�π�FT*�����a$I��>��H��e��~����V���Y/3�R�/�)��>d$I��>2��8`Cj���w�,n@�FU*�9tt�f$I��~<;��=�/4RD~����@��� X��-�ѕ�z��ἱI�$��:� ԍ��R �a�@��b X��{��+�Qx��u�q�$I�Л�z�o���� /~3\8����ڒ���4B������N7�$IҀ���j �V]n1�8H�$I��YFBj�3��̚�̵���ja ����p���p��� �$I���s/3R� Ӻ�-�Yj+L;�.0�R�́��I�$�A���v?� #!5�"��aʄ��j}���U���Km�ɽ��H�$Ij��C���Ys?h$I��Dl8�4��3���.��v�}���m���7�UiI=�&�=0L�g0$I��4���: ���emb�e��`���� e�Qbm�0u�? �$I�T!Sƍ'�-���s��v�)s#C��0�:�XB���2���a� w I�$�zbww�{�."p��Pz�O� �=�Ɔ�\����[� �����o($I������aw]�`���E���).K���v�i�:�L�*#gР7[��$I�����yG���PI=@��R� �4�y��R~�̮�´cg I�$I/<�t�P�ͽ ��h�Dg�o� 94����Z^k盇�΄8��I���56��^�W�$I�^�0���̜�N�?4*�H`237}g��+h���x�o��q)��SJ@p|�`�� �$I��%>������-�h���O�0e�O�>��\ԣNߌZ��D6��R�=K ����~n($I�$��y�3��D>o4�b#px�2���$��yڪt���z���W���~a�� �$I��~?�x<��e{W���g��ô�{�x$/�=�{t�G�0�7��e���a���B�$IҀ�yG��^S�卆�"puS��3��*�E=洣��,`9�>��'���Bww�pH�$IZ��ݑ�nC�㧄���Pc�_9��sO gw����J=l1�:mKB�>�����Ab<4L�p���$I�����b �o1Z���Q�@8�5�b�̍ S'�F���,�F��e���,^I�$Ij���E�dù{�l4� �8�Ys_�s� Z8.��x �m"+{~��?q,��Z D�!I�$��ϻ�'|X�h��B�)=��…'�]��M�>��5��� r�g���otԎ 獽�PH�$Ij����IP���hh)n#�cÔq���A'�ug5qw���U�&r�F|1��E%I�$%����]��!'�3�AFD/;C�k_`�9��� �v�!ٴt�PV�;��x`�'��*b�Qa� w I�$I�x�5� �����FC�3D����_��~��A�_�#O݆���Dv��V?<���q�w�+I�$I�{��=�Z�8"�.#RI���Y�yj���Ǫ����=f�D�l�9�%�M�,�����a8$I�$��Yw�i[�7�ݍFe�$�s��1��ՋBV�A?�`�]#!��oz����4zjLJ���o8$I�$%�@3j�A��a4��(�o�� �;�p,,dya�=��F9ً[��LS���PH�$IJ�Y�Љ+3��> 5"���3�9�aZ�<ñh!�{T�pB�G��k��j}��S�p��� �$I��lvF��.���F$I� ��z<� '\���K*qq��.f�<���2�Y�!�S"-\I�$I��Yw�č��jF$ w9��� \ߪB�.�1�v!Ʊ���?+��r�:�^�!I�$�BϹ�B� ����H��"�B�;L��'G[ 4�U�����#5>�੐�)|#�o0��aڱ���$I���>�}��k&�1`U#�V��?��Ys��V x���>�{t���1�[�I~D���&(I�$I/{��H�0fw�"�q"���y�%��4����� I�X�y�E~��M�3 8Xψ��L}q�������E�$I���[�> �nD�?~�s����f��� �����]o�΁� �cT��6"?'�_�Ἣ� �$I��>�~��.f�|'!������N�?�⟩����0��G KkX�Z�E��]�ޡ;�����/����&�?k�� O�ۘH�$IR��������ۀw�XӨ��<�7@��P��nS��04�a����Ӷ�p�.��:��@���\IWQ�J6�s�S%I�$���e��5��ڑ���v`�3:���x'�;��w��q_�vp�gHyX�Z� ��3�gЂ7{{���E�����uԹ�n�±��}�$I�$��������8t;b|��5��91n��ء����Q"�P������6���O�5�i���� }�i�R�̈́���%�Q�̄p!�I䮢�]��������O{�H�$IR�ϻ�9��s֧�� a=`-� aB\X��0"+5"C�1�H�b?߮����3x��3�&�g�ş�g��g����l��_���h�����Z^,`5�?���ߎ��vĸ%�̀M!�OZC2#0x ����LJ��0�� �G�w����$I�$I�}�<�{Eb�+y���;�iI,`����ܚ��F�����:�5��ܛ�A�8���-O�-|�8�K�7��s�|#�Z8�a&�>���<��a&����/V��tb�t��L��ʌI�$I�$I�$I�$I�$I�$IRj���D��D�%tEXtdate:create2022-05-31T04:40:26+00:00�!Î%tEXtdate:modify2022-05-31T04:40:26+00:00�|{2IEND�B`�Mini Shell

HOME


Mini Shell 1.0
DIR:/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/__pycache__/
Upload File :
Current File : //opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/__pycache__/test_linux.cpython-38.pyc
U

�=�_�^�@sdZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'ddlm(Z(ddlm)Z)ddlm*Z*ej+�,ej+�-e.��Z/dZ0dZ1dZ2dZ3d Z4e�r�d!Z5e�d"�Z6d#d$�Z7d%d&�Z8d'd(�Z9d)d*�Z:d+d,�Z;d-d.�Z<d/d0�Z=d1d2�Z>d3d4�Z?ej@d5d6��ZAej@d7d8��ZBe)�Ced9�Gd:d;�d;e��ZDe)�Ced9�Gd<d=�d=e��ZEe)�Ced9�Gd>d?�d?e��ZFe)�Ced9�Gd@dA�dAe��ZGe)�Ced9�GdBdC�dCe��ZHe)�Ced9�GdDdE�dEe��ZIe)�Ced9�GdFdG�dGe��ZJe)�Ced9�GdHdI�dIe��ZKe)�Ced9�GdJdK�dKe��ZLe)�Ced9�GdLdM�dMe��ZMe)�Ced9�GdNdO�dOe��ZNe)�Ced9�GdPdQ�dQe��ZOe)�Ced9�GdRdS�dSe��ZPe)�Ced9�GdTdU�dUe��ZQe)�Ced9�GdVdW�dWe��ZRe)�Ced9�e)�CedX�GdYdZ�dZe���ZSe)�Ced9�Gd[d\�d\e��ZTe)�Ced9�Gd]d^�d^e��ZUe)�Ced9�Gd_d`�d`e��ZVe)�Ced9�Gdadb�dbe��ZWe)�Ced9�Gdcdd�dde��ZXe)�Ced9�Gdedf�dfe��ZYeZdgk�rddhl[m\Z\e\e.�dS)izLinux specific tests.�)�divisionN)�LINUX)�
basestring)�FileNotFoundError)�PY3)�u)�
call_until)�GLOBAL_TIMEOUT)�HAS_BATTERY)�HAS_CPU_FREQ)�HAS_GETLOADAVG)�
HAS_RLIMIT)�mock)�PsutilTestCase)�PYPY)�
reload_module)�retry_on_failure)�safe_rmpath)�sh)�skip_on_not_implemented)�
ThreadTask)�TOLERANCE_DISK_USAGE)�TOLERANCE_SYS_MEM)�unittest)�whichi�i�i'�i�i�iz/sys/class/hwmon/hwmon*cCs|ddl}|dd�}tr"t|d�}t�tjtj�}t�|��6t�|�	|�
�tt�
d|��dd��W5QR�SQRXdS�Nr��ascii�256s��)�fcntlr�bytes�socket�AF_INET�
SOCK_DGRAM�
contextlib�closing�	inet_ntoa�ioctl�fileno�SIOCGIFADDR�struct�pack��ifnamer!�s�r1�J/opt/alt/python38/lib64/python3.8/site-packages/psutil/tests/test_linux.py�get_ipv4_addressBs


���r3cCs|ddl}|dd�}tr"t|d�}t�tjtj�}t�|��6t�|�	|�
�tt�
d|��dd��W5QR�SQRXdSr)r!rr"r#r$r%r&r'r(r)r*�SIOCGIFNETMASKr,r-r.r1r1r2�get_ipv4_netmaskOs


���r5cCs|ddl}|dd�}tr"t|d�}t�tjtj�}t�|��6t�|�	|�
�tt�
d|��dd��W5QR�SQRXdSr)r!rr"r#r$r%r&r'r(r)r*�SIOCGIFBRDADDRr,r-r.r1r1r2�get_ipv4_broadcast\s


���r7c		Cs�tdd��8}|��D]}|��}|d|krq>qtd|��W5QRX|d}g}tdt|�d�D]}|�|||d��qdd�|�}t�	tj
|�}t�tj
|�S)Nz/proc/net/if_inet6�rt���zcould not find interface %rr��:)�open�	readlines�split�
ValueError�range�len�append�joinr#Z	inet_pton�AF_INET6�	inet_ntop)	r/�f�line�fieldsZunformatted�groups�iZ	formattedZpackedr1r1r2�get_ipv6_addressis
rKc
s�ddl}|dd�}tr"t|d�}t�tjtj�}t�|��l|�|�	�t
t�d|��}trfdd��nddl
}|j�d��fdd	�|d
d�D��dd�W5QR�SQRXdS)
NrrrrcSs|S�Nr1��xr1r1r2�ord�szget_mac_address.<locals>.ord�csg|]}d�|��qS)z%02x:r1)�.0�char�rOr1r2�
<listcomp>�sz#get_mac_address.<locals>.<listcomp>�r r9)r!rr"r#r$r%r&r'r)r*�
SIOCGIFHWADDRr,r-�__builtin__rOrC)r/r!r0�inforWr1rSr2�get_mac_addresszs 

�
rYcCs|tdddid�}|�d�}|D]F}|�d�r|��\}}}}t�dd�}|t|�t|�t|��Sqtd	d�|���d
S)zQParse 'free' cmd and return swap memory's s total, used and free
    values.
    �free -b�LANG�C.UTF-8��env�
ZSwap�freeztotal used freez&can't find 'Swap' in 'free' output:
%sN)rr>�
startswith�collections�
namedtuple�intr?rC)�out�linesrG�_�total�usedr`�ntr1r1r2�	free_swap�s

�rkcCs�tdddid�}|�d�}|D]P}|�d�rdd�|��d	d
�D�\}}}}t�dd�}||||||�Sqtd
d�|���dS)zSParse 'free' cmd and return physical memory's total, used
    and free values.
    rZr[r\r]r_ZMemcSsg|]}t|��qSr1)rd�rQrNr1r1r2rT�sz free_physmem.<locals>.<listcomp>��r`ztotal used free shared outputz%can't find 'Mem' in 'free' output:
%sN)rr>rarbrcr?rC)rerfrGrhrir`�sharedrjr1r1r2�free_physmem�s

�
��rpcCsVtdddid�}|�d�D]*}|��}||krt|�d�d�Sqtd|��dS)	Nz	vmstat -sr[r\r]r_� rz can't find %r in 'vmstat' output)rr>�striprdr?)�statrerGr1r1r2�vmstat�srtcCs:td���}d|krt�d��ttt|��d�d���S)Nzfree -VZUNKNOWNzcan't determine free versionr9�.)rrrr�SkipTest�tuple�maprdr>)rer1r1r2�get_free_version_info�s
ryc	#sF���fdd�}t�trdnd}tj|d|d��}|VW5QRXdS)zMock open() builtin and forces it to return a certain `content`
    on read() if the path being opened matches `for_path`.
    csL|�kr8tr,t�t�r t���St���SqHt���Sn�|f|�|�SdSrL)r�
isinstancer�io�StringIO�BytesIO��name�args�kwargs��content�for_path�	orig_openr1r2�	open_mock�s

z$mock_open_content.<locals>.open_mock�
builtins.open�__builtin__.openT��create�side_effectN�r<rr�patch)r�r�r��patch_point�mr1r�r2�mock_open_content�s
r�c	#sF���fdd�}t�trdnd}tj|d|d��}|VW5QRXdS)zZMock open() builtin and raises `exc` if the path being opened
    matches `for_path`.
    cs"|�kr��n�|f|�|�SdSrLr1r~��excr�r�r1r2r��sz&mock_open_exception.<locals>.open_mockr�r�Tr�Nr�)r�r�r�r�r�r1r�r2�mock_open_exception�s
r�z
LINUX onlyc@s�eZdZdd�Ze�dd��Ze�dd��Ze�dd��Ze�d	d
��Ze�dd��Z	e�d
d��Z
e�dd��Zdd�Ze�dd��Z
dd�Zdd�Zdd�Zdd�ZdS)�TestSystemVirtualMemorycCs&td�d}t��j}|�||�dS)Nztotal memory�)rt�psutil�virtual_memoryrh�assertAlmostEqual��selfZvmstat_value�psutil_valuer1r1r2�
test_total�s
z"TestSystemVirtualMemory.test_totalcCsLt�dkr|�d��t�}|j}t��j}|j||td|||jfd�dS)N)�r��zold free version�	%s %s 
%s��delta�msg)	ryZskipTestrprir�r�r�r�output�r�r`�
free_valuer�r1r1r2�	test_used�s


�z!TestSystemVirtualMemory.test_usedcCs*td�d}t��j}|j||td�dS)Nzfree memoryr��r�)rtr�r�r`r�rr�r1r1r2�	test_frees
�z!TestSystemVirtualMemory.test_freecCs*td�d}t��j}|j||td�dS)Nz
buffer memoryr�r�)rtr�r��buffersr�rr�r1r1r2�test_bufferss
�z$TestSystemVirtualMemory.test_bufferscCs*td�d}t��j}|j||td�dS)Nz
active memoryr�r�)rtr�r��activer�rr�r1r1r2�test_actives
�z#TestSystemVirtualMemory.test_activecCs*td�d}t��j}|j||td�dS)Nzinactive memoryr�r�)rtr�r��inactiver�rr�r1r1r2�
test_inactives
�z%TestSystemVirtualMemory.test_inactivecCsJt�}|j}|dkrt�d��t��j}|j||td|||jfd�dS)Nrz%free does not support 'shared' columnr�r�)	rprorrvr�r�r�rr�r�r1r1r2�test_shared#s

�z#TestSystemVirtualMemory.test_sharedcCshtd�}|�d�}d|dkr*t�d��n:t|d��d�}t��j}|j||t	d|||fd	�dS)
NrZr_�	availablerz(free does not support 'available' columnrmr9r�r�)
rr>rrvrdr�r�r�r�r)r�rerfr�r�r1r1r2�test_available.s

�z&TestSystemVirtualMemory.test_availablec
Csdtdt�d������D}tjdd���*}t�d�t��}|j	sDt
�|�t|�d�|d}|j
�d�slt
�|�d	t|j��|�d
t|j��|�dt|j��|�dt|j��|�d
t|j��|�dt|j��|�dt|j��|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�W5QRXW5QRXdS)N�
/proc/meminfoap                Active(anon):    6145416 kB
                Active(file):    2950064 kB
                Inactive(anon):   574764 kB
                Inactive(file):  1567648 kB
                MemAvailable:         -1 kB
                MemFree:         2057400 kB
                MemTotal:       16325648 kB
                SReclaimable:     346648 kB
                T��record�alwaysrmr�psutil/_pslinux.pyz#memory stats couldn't be determined�cachedror�r�r�r�)r��textwrap�dedent�encode�warnings�catch_warnings�simplefilterr�r��called�AssertionError�assertEqualrA�filename�endswith�assertIn�str�messager�r�r�ror�r��slab�r�r��ws�ret�wr1r1r2�test_warnings_on_misses=s:�

�z/TestSystemVirtualMemory.test_warnings_on_missesc
	Cs�ddlm}ddlm}i}|d��0}|D]$}|��}t|d�d||d<q*W5QRX||�}d|kr�|d}t||�|d}	|�|	d	�dS)
Nr)�calculate_avail_vmem)�open_binaryr�rmr�s
MemAvailable:�dr)�psutil._pslinuxr�r�r>rd�absZ
assertLess)
r�r�r�ZmemsrFrGrH�a�bZdiff_percentr1r1r2�test_avail_old_percentds
$z.TestSystemVirtualMemory.test_avail_old_percentc
Csvtdt�d�����X}tjdd��}t��}W5QRX|js@t	�|�
|jd�|d}|�dt
|j��W5QRXdS)Nr�aL                Active:          9444728 kB
                Active(anon):    6145416 kB
                Active(file):    2950064 kB
                Buffers:          287952 kB
                Cached:          4818144 kB
                Inactive(file):  1578132 kB
                Inactive(anon):   574764 kB
                Inactive(file):  1567648 kB
                MemAvailable:    6574984 kB
                MemFree:         2057400 kB
                MemTotal:       16325648 kB
                Shmem:            577588 kB
                SReclaimable:     346648 kB
                Tr�l �"r�,inactive memory stats couldn't be determined�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r1r1r2� test_avail_old_comes_from_kernelws�
�z8TestSystemVirtualMemory.test_avail_old_comes_from_kernelc
Csvtdt�d�����X}tjdd��}t��}W5QRX|js@t	�|�
|jd�|d}|�dt
|j��W5QRXdS)Nr�a�                    Active:          9444728 kB
                    Active(anon):    6145416 kB
                    Buffers:          287952 kB
                    Cached:          4818144 kB
                    Inactive(file):  1578132 kB
                    Inactive(anon):   574764 kB
                    MemFree:         2057400 kB
                    MemTotal:       16325648 kB
                    Shmem:            577588 kB
                    Tr��`LGrr�r�r�r1r1r2�test_avail_old_missing_fields�s�
�z5TestSystemVirtualMemory.test_avail_old_missing_fieldscCs�tdt�d�����ltdttjd���Ntj	dd��6}t
��}|�|j
d�|d}|�d	t|j��W5QRXW5QRXW5QRXdS)
Nr�aT                    Active:          9444728 kB
                    Active(anon):    6145416 kB
                    Active(file):    2950064 kB
                    Buffers:          287952 kB
                    Cached:          4818144 kB
                    Inactive(file):  1578132 kB
                    Inactive(anon):   574764 kB
                    Inactive(file):  1567648 kB
                    MemFree:         2057400 kB
                    MemTotal:       16325648 kB
                    Shmem:            577588 kB
                    SReclaimable:     346648 kB
                    z/proc/zoneinfo�no such file or directoryTr�r�rr�)r�r�r�r�r��IOError�errno�ENOENTr�r�r�r�r�r�r�r�r�)r�r�r�r�r1r1r2�test_avail_old_missing_zoneinfo�s&�
���z7TestSystemVirtualMemory.test_avail_old_missing_zoneinfoc	s��fdd�}t�trdnd}tj|d|d���}t��}|js@t�|�|j	d�|�|j
d�|�|jd	�|�|jd
�|�|j
d�|�|jd�|�|jd
�|�|jd�|�|jd�W5QRXdS)Ncs0|dkrt�t�d����S�|f|�|�SdS)Nr�a=	                    MemTotal:              100 kB
                    MemFree:               2 kB
                    MemAvailable:          3 kB
                    Buffers:               4 kB
                    Cached:                5 kB
                    SwapCached:            6 kB
                    Active:                7 kB
                    Inactive:              8 kB
                    Active(anon):          9 kB
                    Inactive(anon):        10 kB
                    Active(file):          11 kB
                    Inactive(file):        12 kB
                    Unevictable:           13 kB
                    Mlocked:               14 kB
                    SwapTotal:             15 kB
                    SwapFree:              16 kB
                    Dirty:                 17 kB
                    Writeback:             18 kB
                    AnonPages:             19 kB
                    Mapped:                20 kB
                    Shmem:                 21 kB
                    Slab:                  22 kB
                    SReclaimable:          23 kB
                    SUnreclaim:            24 kB
                    KernelStack:           25 kB
                    PageTables:            26 kB
                    NFS_Unstable:          27 kB
                    Bounce:                28 kB
                    WritebackTmp:          29 kB
                    CommitLimit:           30 kB
                    Committed_AS:          31 kB
                    VmallocTotal:          32 kB
                    VmallocUsed:           33 kB
                    VmallocChunk:          34 kB
                    HardwareCorrupted:     35 kB
                    AnonHugePages:         36 kB
                    ShmemHugePages:        37 kB
                    ShmemPmdMapped:        38 kB
                    CmaTotal:              39 kB
                    CmaFree:               40 kB
                    HugePages_Total:       41 kB
                    HugePages_Free:        42 kB
                    HugePages_Rsvd:        43 kB
                    HugePages_Surp:        44 kB
                    Hugepagesize:          45 kB
                    DirectMap46k:          46 kB
                    DirectMap47M:          47 kB
                    DirectMap48G:          48 kB
                    )r{r}r�r�r�r~�r�r1r2r��s3zETestSystemVirtualMemory.test_virtual_memory_mocked.<locals>.open_mockr�r�Tr�i�i�ipiTii iX�)r<rrr�r�r�r�r�r�rhr`r�r�ror�r�r�r�)r�r�r�r��memr1r�r2�test_virtual_memory_mocked�s7
z2TestSystemVirtualMemory.test_virtual_memory_mockedN)�__name__�
__module__�__qualname__r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r1r1r1r2r��s,







'
r�c@s\eZdZedd��Zdd�Ze�dd��Ze�dd��Zd	d
�Z	dd�Z
d
d�Zdd�ZdS)�TestSystemSwapMemoryc	Cs,td��}|��}W5QRXd|ko*d|kS)z3Return True if /proc/meminfo provides swap metrics.r�z
SwapTotal:z	SwapFree:)r<�read)rF�datar1r1r2�meminfo_has_swap_infos
z*TestSystemSwapMemory.meminfo_has_swap_infocCs"t�j}t��j}|j||td�S�Nr�)rkrhr��swap_memoryr�r�r�r�r�r1r1r2r�$s
�zTestSystemSwapMemory.test_totalcCs"t�j}t��j}|j||td�Sr�)rkrir�r�r�rr�r1r1r2r�*s
�zTestSystemSwapMemory.test_usedcCs"t�j}t��j}|j||td�Sr�)rkr`r�r�r�rr�r1r1r2r�1s
�zTestSystemSwapMemory.test_freec
Cs�tjddd���}tjdd��x}t�d�t��}|js:t�|�	t
|�d�|d}|j�d�sbt�|�
d	t|j��|�	|jd�|�	|jd�W5QRXW5QRXdS)
N�psutil._common.openT�r�r�r�rmrr�z9'sin' and 'sout' swap memory stats couldn't be determined)rr�r�r�r�r�r�r�r�r�rAr�r�r�r�r��sin�soutr�r1r1r2�test_missing_sin_sout8s

�z*TestSystemSwapMemory.test_missing_sin_soutc
Cs�tdttjd����}tjdd��x}t�d�t��}|j	s>t
�|�t|�d�|d}|j
�d�sft
�|�d	t|j��|�|jd�|�|jd�W5QRXW5QRXdS)
Nz/proc/vmstatr�Tr�r�rmrr�zK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0)r�r�r�r�r�r�r�r�r�r�r�r�rAr�r�r�r�r�r�r�r�r1r1r2�test_no_vmstat_mockedGs$
�

�z*TestSystemSwapMemory.test_no_vmstat_mockedc	Cs�|��st�d�St�d��}t��}W5QRX|jr:t�ddl	m
}|��\}}}}}}}||9}||9}|�|j
|�|j|j|td�dS)Nz!/proc/meminfo has no swap metricsz"psutil._pslinux.cext.linux_sysinforr�)r�r�skiprr�r�r�r�r�Zpsutil._psutil_linuxZ
_psutil_linuxZ
linux_sysinfor�rhr�r`r)r�r��swapZcextrgrhr`Zunit_multiplierr1r1r2�test_meminfo_against_sysinfoZs

z1TestSystemSwapMemory.test_meminfo_against_sysinfoc	Cs,tdd��}t��|jst�W5QRXdS)Nr��)r�r�r�r�r��r�r�r1r1r2�#test_emulate_meminfo_has_no_metricsjsz8TestSystemSwapMemory.test_emulate_meminfo_has_no_metricsN)
r�r�r��staticmethodr�r�rr�r�r�r�r�r�r1r1r1r2r�s


r�c@seZdZdd�ZdS)�TestSystemCPUTimescCs�t��j}t�dt��d�d}ttt	|�
d���}|dkrL|�d|�n|�d|�|dkrn|�d|�n|�d|�|d	kr�|�d
|�n|�d
|�dS)Nz
\d+\.\d+\.\d+�rru)r����steal)r�r�r Zguest)r�r�rZ
guest_nice)
r��	cpu_times�_fields�re�findall�os�unamerwrxrdr>r��assertNotIn)r�rHZ
kernel_verZkernel_ver_infor1r1r2�test_fields{s
zTestSystemCPUTimes.test_fieldsN)r�r�r�rr1r1r1r2r�xsr�c@s�eZdZe�ej�d�d�dd��Ze�ej�d�d�dd��Z	e�e
d	�d
�dd��Ze�e
d
�d�dd��Zdd�Z
dS)�TestSystemCPUCountLogical�/sys/devices/system/cpu/onlinez-/sys/devices/system/cpu/online does not existc	CsVtd��}|����}W5QRXdt|�krRt|�d�d�d}|�t��|�dS)Nr�-rm)	r<r�rrr�rdr>r�r��	cpu_count)r�rF�valuer1r1r2�test_against_sysdev_cpu_online�s

z8TestSystemCPUCountLogical.test_against_sysdev_cpu_online�/sys/devices/system/cpuz&/sys/devices/system/cpu does not existcCs0t�d�}tdd�|D��}|�t��|�dS)Nr
cSs g|]}t�d|�dk	r|�qS)zcpu\d+$N)r�searchrlr1r1r2rT�szITestSystemCPUCountLogical.test_against_sysdev_cpu_num.<locals>.<listcomp>)r�listdirrAr�r�r
)r�Zls�countr1r1r2�test_against_sysdev_cpu_num�s
z5TestSystemCPUCountLogical.test_against_sysdev_cpu_numZnprocznproc utility not availablecCs$ttd��}|�tjdd�|�dS)Nznproc --allT�Zlogical)rdrr�r�r
)r��numr1r1r2�test_against_nproc�sz,TestSystemCPUCountLogical.test_against_nproc�lscpu�lscpu utility not availablecCs8td�}tdd�|�d�D��}|�tjdd�|�dS)N�lscpu -pcSsg|]}|�d�s|�qS)�#�rarlr1r1r2rT�s
z@TestSystemCPUCountLogical.test_against_lscpu.<locals>.<listcomp>r_Tr)rrAr>r�r�r
)r�rerr1r1r2�test_against_lscpu�sz,TestSystemCPUCountLogical.test_against_lscpuc
Csddl}|j��}tjdtd���}|�|j��|�|js>t�tjddd��:}|�	|j���|�|j
d�|�|jddd�W5QRXtd	d
��}|�
�}W5QRXt�|�}tjd|dd��}|�|j��|�W5QRXtd	d��}|�|j��|�|jW5QRXW5QRXdS)
Nrzpsutil._pslinux.os.sysconf�r�r�Tr�r��
/proc/stat�
/proc/cpuinfo�rb��return_valuer�r�)r��_pslinuxZcpu_count_logicalrr�r?r�r�r��assertIsNoneZ
call_countZ	call_argsr<r�r{r}r�)r�r�Zoriginalr�rFZcpuinfo_data�	fake_filer1r1r2�test_emulate_fallbacks�s2
�
 
�z0TestSystemCPUCountLogical.test_emulate_fallbacksN)r�r�r�r�skipIfr�path�existsrrrrrr$r1r1r1r2r�s�
�


rc@s6eZdZe�ed�d�dd��Zdd�Zdd�Zd	S)
�TestSystemCPUCountPhysicalrrcCs\td�}t�}|�d�D]&}|�d�s|�d�}|�|d�q|�tjdd�t|��dS)Nrr_r�,rmFr)	r�setr>ra�addr�r�r
rA)r�reZcore_idsrGrHr1r1r2r�s

z-TestSystemCPUCountPhysical.test_against_lscpuc	CsPtj��}tjdgd��}tj��}|js.t�W5QRX|dk	rL|�||�dS)N�	glob.glob�r )r�r!�cpu_count_physicalrr�r�r�r�)r�Zmeth_1r�Zmeth_2r1r1r2�
test_method_2�s

z(TestSystemCPUCountPhysical.test_method_2c
Cs\tjdgd��0}tjddd��}|�tj���W5QRXW5QRX|jsNt�|jsXt�dS)Nr,r-r�Tr�)rr�r"r�r!r.r�r�)r��m1�m2r1r1r2�test_emulate_none�s
$
z,TestSystemCPUCountPhysical.test_emulate_noneN)	r�r�r�rr%rrr/r2r1r1r1r2r(�s
	r(c@szeZdZe�ed�dd��Ze�ed�dd��Ze�ed�dd��Ze�ed�dd	��Z	e�ed�d
d��Z
dS)
�TestSystemCPUFrequency�
not supportedc	s@�fdd�}tjj�tjd|dd��t��s2t�W5QRXdS)Ncs|�d�rdS�|�SdS)N�&/sys/devices/system/cpu/cpufreq/policyFr�r&�Zorig_existsr1r2�path_exists_mock�s
zMTestSystemCPUFrequency.test_emulate_use_second_file.<locals>.path_exists_mock�os.path.existsT)r�r�)rr&r'rr�r��cpu_freqr�)r�r8r1r7r2�test_emulate_use_second_file�s�z3TestSystemCPUFrequency.test_emulate_use_second_filec	s���fdd�}g�tjj�z�tjd|d��rttj�t��}|sFt	��sNt	�|�
|jd�|�
|jd�tjdd�D] }|�
|jd�|�
|jd�qvW5QRXW5ttj�tt�XdS)Ncs,|�d�rdS|dkr ��d��|�SdS)Nz/sys/devices/system/cpu/Fr)rarBr6��flagsZos_path_existsr1r2r8�s


zITestSystemCPUFrequency.test_emulate_use_cpuinfo.<locals>.path_exists_mockr9r�T�Zpercpu)
rr&r'rr�r!rr�r:r�r��max�min)r�r8r��freqr1r<r2�test_emulate_use_cpuinfo�s 

z/TestSystemCPUFrequency.test_emulate_use_cpuinfoc
s��fdd�}t�trdnd}tj||d��ftjddd��Lt��}|�|jd	�|jd
krj|�|jd�|j	d
kr�|�|j	d�W5QRXW5QRXdS)
Ncs�|�d�r|�d�rt�d�S|�d�r<|�d�r<t�d�S|�d�rZ|�d�rZt�d�S|dkrlt�d	�S�|f|�|�SdS)
N�/scaling_cur_freqr5�500000�/scaling_min_freq�600000�/scaling_max_freqs700000rscpu MHz		: 500�r�rar{r}r~r�r1r2r�s
�

�

�

z;TestSystemCPUFrequency.test_emulate_data.<locals>.open_mockr�r�rr9Tr-�@@r>���@g�@�
r<rrr�r�r:r��currentrAr@�r�r�r�rBr1r�r2�test_emulate_datas�

z(TestSystemCPUFrequency.test_emulate_datacs�fdd�}t�trdnd}tj||d���tjddd���tjd	d
d���tjdd�}|�|djd
�|djdkr�|�|djd�|dj	dkr�|�|dj	d�|�|djd�|djdkr�|�|djd�|dj	dkr�|�|dj	d�W5QRXW5QRXW5QRXdS)Ncs�|}|�d�r"|�d�r"t�d�S|�d�r@|�d�r@t�d�S|�d�r^|�d�r^t�d�S|�d�r||�d�r|t�d	�S|�d�r�|�d�r�t�d
�S|�d�r�|�d�r�t�d�S|dkr�t�d
�S�|f|�|�SdS)NrDz'/sys/devices/system/cpu/cpufreq/policy0s100000rF�200000rHs300000z'/sys/devices/system/cpu/cpufreq/policy1s400000rErGrscpu MHz		: 100
cpu MHz		: 400rI)rr�r��nr�r1r2r�9s8
�

�

�

�

�

�

z@TestSystemCPUFrequency.test_emulate_multi_cpu.<locals>.open_mockr�r�rr9Tr-�!psutil._pslinux.cpu_count_logicalr�r?r�Y@r>gi@g�r@rmgy@rJrKrLrNr1r�r2�test_emulate_multi_cpu7s&�z-TestSystemCPUFrequency.test_emulate_multi_cpucs��fdd�}t�trdnd}tj||d��Ptjddd��6tjd	d
d��t��}|�|jd�W5QRXW5QRXW5QRXdS)NcsR|�d�rttjd��n6|�d�r,t�d�S|dkr>t�d�S�|f|�|�SdS)NrDrPz/cpuinfo_cur_freqrPrscpu MHz		: 200)r�r�r�r�r{r}r~r�r1r2r�hs



zOTestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_file.<locals>.open_mockr�r�rr9Tr-rRrm��)r<rrr�r�r:r�rMrNr1r�r2�%test_emulate_no_scaling_cur_freq_filees
�z<TestSystemCPUFrequency.test_emulate_no_scaling_cur_freq_fileN)r�r�r�rr%rr;rCrOrTrVr1r1r1r2r3�s




-r3c@seZdZdd�Zdd�ZdS)�TestSystemCPUStatscCs&td�}t��j}|j||dd�dS)Nzcontext switches��r�)rtr��	cpu_statsZctx_switchesr�r�r1r1r2�test_ctx_switchess
z$TestSystemCPUStats.test_ctx_switchescCs&td�}t��j}|j||dd�dS)N�
interruptsrXr�)rtr�rYr[r�r�r1r1r2�test_interrupts�s
z"TestSystemCPUStats.test_interruptsN)r�r�r�rZr\r1r1r1r2rW|srWc@s"eZdZe�ed�dd��ZdS)�TestLoadAvgr4c	Cs�t��}tdd��}|����}W5QRX|jt|d�|ddd�|jt|d�|ddd�|jt|d�|ddd�dS)Nz
/proc/loadavg�rrrmr�r�)r��
getloadavgr<r�r>r��float)r�r�rFZ
proc_valuer1r1r2�test_getloadavg�szTestLoadAvg.test_getloadavgN)r�r�r�rr%rrar1r1r1r2r]�sr]c@seZdZdd�ZdS)�TestSystemNetIfAddrscCs�t����D]�\}}|D]�}|jtjkr<|�|jt|��q|jtj	kr�|�|jt
|��|�|jt|��|j
dk	r�|�|j
t|��q�|�t|�d�q|jtjkr|j�d�d}|�|t|��qqdS)Nz0.0.0.0�%r)r�Znet_if_addrs�itemsZfamilyZAF_LINKr��addressrYr#r$r3Znetmaskr5Z	broadcastr7rDr>rK)r�rZaddrsZaddrrer1r1r2�test_ips�s
�zTestSystemNetIfAddrs.test_ipsN)r�r�r�rfr1r1r1r2rb�srbc@seZdZdd�Zdd�ZdS)�TestSystemNetIfStatsc	Cstt����D]b\}}ztd|�}Wntk
r8YqX|j|jd|k|d�|�|jtt	�
d|�d��qdS)N�ifconfig %sZRUNNING)r�z(?i)MTU[: ](\d+)r)r��net_if_statsrdr�RuntimeErrorr�Zisup�mturdrr)r�r�statsrer1r1r2�test_against_ifconfig�s�z*TestSystemNetIfStats.test_against_ifconfigc
CsNt����D]<\}}td|d�� }|�|jt|������W5QRXqdS)Nz/sys/class/net/%s/mtur8)	r�rirdr<r�rkrdr�rr)r�rrlrFr1r1r2�test_mtu�szTestSystemNetIfStats.test_mtuN)r�r�r�rmrnr1r1r1r2rg�srgc@seZdZe�dd��ZdS)�TestSystemNetIOCountersc	s�fdd�}tjddd�}|��D]�\�}z|��}Wntk
rNYq"YnX|j|j|ddd�|j|j|d	dd�|j|j|d
dd�|j|j|ddd�|j|j	|d
dd�|j|j
|ddd�|j|j|ddd�|j|j|ddd�q"dS)Ncs�i}td��}tt�d|�d�|d<tt�d|�d�|d<tt�d|�d�|d<tt�d|�d	�|d
<tt�d|�d�|d<tt�d|�d	�|d
<tt�d|�d�|d<tt�d|�d�|d<|S)NrhzRX packets[: ](\d+)r�packets_recvzTX packets[: ](\d+)�packets_sentzerrors[: ](\d+)�errinrm�erroutzdropped[: ](\d+)�dropin�dropoutz#RX (?:packets \d+ +)?bytes[: ](\d+)�
bytes_recvz#TX (?:packets \d+ +)?bytes[: ](\d+)�
bytes_sent)rrdrr)Znicr�re�rr1r2�ifconfig�s&����z?TestSystemNetIOCounters.test_against_ifconfig.<locals>.ifconfigTF)Zpernic�nowraprvir�rwrpr�rqrr�
rsrtru)
r��net_io_countersrdrjr�rvrwrprqrrrsrtru)r�ryZniorlZifconfig_retr1rxr2rm�s^
��������z-TestSystemNetIOCounters.test_against_ifconfigN)r�r�r�rrmr1r1r1r2ro�sroc@s8eZdZejded�ejddd�dd���Zdd	�Zd
S)�TestSystemNetConnectionsz psutil._pslinux.socket.inet_ntoprzpsutil._pslinux.supports_ipv6Fr-cCsRz*t�tjtj�}|�|j�|�d�Wntjk
r@YnXtjdd�dS)N)z::1rZinet6�Zkind)	r#rDZSOCK_STREAMZ
addCleanup�closeZbind�errorr��net_connections)r�Z
supports_ipv6rEr0r1r1r2�test_emulate_ipv6_unsupportedsz6TestSystemNetConnections.test_emulate_ipv6_unsupportedc	Cs6tdt�d���}tjdd�|js(t�W5QRXdS)Nz/proc/net/unixa.                0: 00000003 000 000 0001 03 462170 @/tmp/dbus-Qw2hMPIU3n
                0: 00000003 000 000 0001 03 35010 @/tmp/dbus-tB2X8h69BQ
                0: 00000003 000 000 0001 03 34424 @/tmp/dbus-cHy80Y8O
                000000000000000000000000000000000000000000000000000000
                Zunixr~)r�r�r�r�r�r�r�r�r1r1r2�test_emulate_unixs�z*TestSystemNetConnections.test_emulate_unixN)r�r�r�rr�r?r�r�r1r1r1r2r}	s
r}c@s>eZdZe�eed�d�e�dd���Zdd�Z	dd�Z
d	S)
�TestSystemDiskPartitions�statvfszos.statvfs() not availablecCsndd�}tjdd�D]T}t�|j�}||j�\}}}}|�|j|�|j|j|td�|j|j	|td�qdS)NcSsztd|���}|�d�}|�d�|�d�}|��dd�\}}}}|dkrRd}t|�t|�t|�}}}||||fS)Nzdf -P -B 1 "%s"r_rr:ZnonerP)rrrr>�poprd)r&rerfrG�devrhrir`r1r1r2�df2s


z4TestSystemDiskPartitions.test_against_df.<locals>.dfF)�allr�)
r��disk_partitionsZ
disk_usageZ
mountpointr�rhr�r`rri)r�r��partZusager�rhrir`r1r1r2�test_against_df-s
�
�z(TestSystemDiskPartitions.test_against_dfc
Cs�tdd��}|��}W5QRXd|krNt��D]}|jdkr.q�q.|�d�n|t�td��}t	j
d|dd��X}t	j
d	d
gd��<}t��}|js�t�|js�t�|s�t�|�
|djd�W5QRXW5QRXdS)
Nz/proc/filesystemsr^�zfszcouldn't find any ZFS partitionz
nodev	zfs
r�Trz$psutil._pslinux.cext.disk_partitions)z	/dev/sdb3�/r�Zrwr-r)r<r�r�r�ZfstypeZfailr{r|rrr�r�r�r�)r�rFr�r�r#r0r1r�r1r1r2�test_zfs_fsFs.
��

z$TestSystemDiskPartitions.test_zfs_fsc
CsTzFtjddd��.}|�t��t��W5QRX|js:t�W5QRXW5dt_XdS)N�/proczos.path.realpathz
/non/existentr-)	r��PROCFS_PATHrr��assertRaisesrr�r�r�r�r1r1r2�test_emulate_realpath_fail^s�z3TestSystemDiskPartitions.test_emulate_realpath_failN)r�r�r�rr%�hasattrrrr�r�r�r1r1r1r2r�*s
r�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�TestSystemDiskIoCountersc
Cs�tdd���tjddd���tjdd�}|�|jd�|�|jd	�|�|jd
t	�|�|j
d�|�|jd�|�|jd
�|�|j
dt	�|�|jd�|�|jd�W5QRXW5QRXdS)N�/proc/diskstatsz+   3     0   1 hda 2 3 4 5 6 7 8 9 10 11 12�!psutil._pslinux.is_storage_deviceTr-F�rzrmr�r�r:rnr���r{�r�rr�r��disk_io_countersr��
read_count�read_merged_count�
read_bytes�SECTOR_SIZE�	read_time�write_count�write_merged_count�write_bytes�
write_time�	busy_time�r�r�r1r1r2�test_emulate_kernel_2_4ms"��z0TestSystemDiskIoCounters.test_emulate_kernel_2_4c
Cs�tdd���tjddd���tjdd�}|�|jd�|�|jd	�|�|jd
t	�|�|j
d�|�|jd�|�|jd
�|�|j
dt	�|�|jd�|�|jd�W5QRXW5QRXdS)Nr�z'   3    0   hda 1 2 3 4 5 6 7 8 9 10 11r�Tr-Fr�rmr�r�r:rnr�r�r�r{r�r�r1r1r2�test_emulate_kernel_2_6_full�s"��z5TestSystemDiskIoCounters.test_emulate_kernel_2_6_fullc
Cs�tdd���tjddd���tjdd�}|�|jd�|�|jd	t�|�|j	d
�|�|j
dt�|�|jd�|�|jd�|�|j
d�|�|jd�|�|jd�W5QRXW5QRXdS)
Nr�z   3    1   hda 1 2 3 4r�Tr-Fr�rmr�r�r:r)r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r1r1r2�test_emulate_kernel_2_6_limited�s"��z8TestSystemDiskIoCounters.test_emulate_kernel_2_6_limitedc
Cs�tdt�d����tjddd��ltjddd�}|�t|�d�|�|d	j	d
�|�|dj	d
�|�|d	j
d�|�|dj
d�W5QRXW5QRXdS)
Nr���                    3    0   nvme0n1 1 2 3 4 5 6 7 8 9 10 11
                    3    0   nvme0n1p1 1 2 3 4 5 6 7 8 9 10 11
                    r�Fr-T��perdiskrzr��nvme0n1rmZ	nvme0n1p1rn)r�r�r�rr�r�r�r�rAr�r�r�r1r1r2�test_emulate_include_partitions�s��z8TestSystemDiskIoCounters.test_emulate_include_partitionsc
Cs�tdt�d���8tjddd��tjddd�}|�|�W5QRXW5QRXdd�}tdt�d���Ltjdd	|d
��0tjddd�}|�|j	d�|�|j
d�W5QRXW5QRXdS)
Nr�r�r�Fr-r�cSs|dkS)Nr�r1rxr1r1r2�is_storage_device�szSTestSystemDiskIoCounters.test_emulate_exclude_partitions.<locals>.is_storage_deviceTr�rmrn)r�r�r�rr�r�r�r"r�r�r�)r�r�r�r1r1r2�test_emulate_exclude_partitions�s*����z8TestSystemDiskIoCounters.test_emulate_exclude_partitionsc	CsTdd�}tjdd�}tjdd|d��tjdd�}W5QRX|�t|�t|��dS)NcSs|dkrdSdS)Nr�FTr1r6r1r1r2r'�sz?TestSystemDiskIoCounters.test_emulate_use_sysfs.<locals>.existsT)r��psutil._pslinux.os.path.existsr�)r�r�rr�r�rA)r�r'ZwprocfsZwsysfsr1r1r2�test_emulate_use_sysfs�s�z/TestSystemDiskIoCounters.test_emulate_use_sysfsc	Cs6dd�}tjdd|d��|�ttj�W5QRXdS)NcSsdS)NFr1r6r1r1r2r'�sz>TestSystemDiskIoCounters.test_emulate_not_impl.<locals>.existsr�Tr�)rr�r��NotImplementedErrorr�r�)r�r'r1r1r2�test_emulate_not_impl�s�z.TestSystemDiskIoCounters.test_emulate_not_implN)
r�r�r�r�r�r�r�r�r�r�r1r1r1r2r�jsr�c@sReZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	�d
d��Z
dd�ZdS)�TestMisccCs(td�}t��}|�t|�t|��dS)Nz	boot time)rtr��	boot_timer�rdr�r1r1r2�test_boot_time�szTestMisc.test_boot_timec
s|��}t�|�ttj�|d�d��$}|�d�|�d�|�d�W5QRX�z�t��fdd�}trldnd	}tj
||d
���nt	t
�|�tt
j�|jtt
jdd�|�tt
j�|jtt
jdd�|�tt
j�|jtt
jdd�|t
_|�t
��d
�|�tt
���d
�t
jdd�}|�t|�d
�t
jdd�}|�ttt|��d
�ttj�|d�d��$}|�d�|�d�|�d�W5QRX|�t
��d
�|�tt
jdd��d
�|�tt
���d
�|�tttt
jdd���d
�W5QRXW5t�|�t	t
�X|�t
jd�dS)Nrsr�zcpu   0 0 0 0 0 0 0 0 0 0
zcpu0  0 0 0 0 0 0 0 0 0 0
zcpu1  0 0 0 0 0 0 0 0 0 0
cs&|�d�rttjd���|f|�|�S)Nr�zrejecting access for test)rar�r�r�r~r�r1r2r�s
z4TestMisc.test_no_procfs_on_import.<locals>.open_mockr�r�rTr?rzcpu   1 0 0 0 0 0 0 0 0 0
zcpu0  1 0 0 0 0 0 0 0 0 0
zcpu1  1 0 0 0 0 0 0 0 0 0
r�)�
get_testfnr�mkdirr<r&rC�write�shutilZrmtreerr�rrr�r�r�r��cpu_percent�cpu_times_percentr�r��sumrx�assertNotEqual)r�Z	my_procfsrFr�r�Zper_cpu_percentZper_cpu_times_percentr1r�r2�test_no_procfs_on_import�s\


�

��

z!TestMisc.test_no_procfs_on_importc	Cs,tdt�d�����8}t��|js(t�tjdd�t��tjdd�W5QRXtdt�d������}t��}|jszt�tjdd�}t��}tjdd�}|�	|d�|�	t
|�d�|�	t
|�d�|�	t
|�d�|�	t
tt
|��d�|�	t
tt
|��d�|�|j
d�|�	|jd�W5QRXdS)Nrz�                cpu   0 0 0 0 0 0 0 1 0 0
                cpu0  0 0 0 0 0 0 0 1 0 0
                cpu1  0 0 0 0 0 0 0 1 0 0
                Tr?z�                cpu   1 0 0 0 0 0 0 0 0 0
                cpu0  1 0 0 0 0 0 0 0 0 0
                cpu1  1 0 0 0 0 0 0 0 0 0
                rrS)r�r�r�r�r�r�r�r�r�r�r�rxr�r��user)r�r�r�Zcpu_percent_percpur�Zcpu_times_percent_percpur1r1r2�test_cpu_steal_decrease<s8�
�
z TestMisc.test_cpu_steal_decreasec	Cs8tjddd�� }|�ttjj�|js*t�W5QRXdS)Nr�Tr�)	rr�r�rjr�r!r�r�r�r�r1r1r2�test_boot_time_mockedes�zTestMisc.test_boot_time_mockedc	Cs�tjddgd��&}|�t��djd�|js2t�W5QRXtjddgd��&}|�t��djd�|jsnt�W5QRXtjddgd��&}|�t��djd�|js�t�W5QRXdS)	Nzpsutil._pslinux.cext.users)�	giampaolo�pts/2z:0��h�ATr�r-rZ	localhost)r�r�z:0.0r�Tr�)r�r��foor�Tr�r�)rr�r�r�ZusersZhostr�r�r�r1r1r2�test_users_mockedls$���zTestMisc.test_users_mockedcCs�|��}t�|�z�|t_|�ttj�|�ttj�|jttjdd�|�ttj	�|�ttj
�|�ttj�|�ttj�|�ttj
�|�tjtj�W5dt_XdS)Nr�Tr?)r�rr�r�r�r�r�r�r�r�r�r|rir�Z
NoSuchProcess�Process)r�Ztdirr1r1r2�test_procfs_path�s
zTestMisc.test_procfs_pathcCs�t�}|��zjt��}|��}|�t|�d�t|dd�d�dj	}|�
|j|�t�|�}|��|�
|t���W5|��XdS)Nr�cSs|jSrL)�idrMr1r1r2�<lambda>�r�z)TestMisc.test_issue_687.<locals>.<lambda>)�keyrm)r�start�stopr�r��threadsr�rA�sortedr�r��pidZas_dictrZpids)r��t�pr��tidZptr1r1r2�test_issue_687�s
zTestMisc.test_issue_687c	Cs6tdd��"}t�t���st�|js(t�W5QRXdS)N�/proc/%s/statusrP)r�r�Z
pid_existsr�getpidr�r�r�r1r1r2�test_pid_exists_no_proc_status�sz'TestMisc.test_pid_exists_no_proc_statusN)r�r�r�r�r�r�r�r�r�rr�r�r1r1r1r2r��s=)
r�z
no batteryc@sfeZdZe�ed�d�dd��Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�ZdS)�TestSensorsBatteryZacpizacpi utility not availablecCsDtd�}t|�d�d���dd��}t��j}|j||dd�dS)Nzacpi -br)rmrcrPr�)	rrdr>rr�replacer��sensors_battery�percentr�)r�reZ
acpi_valuer�r1r1r2�test_percent�s
zTestSensorsBattery.test_percentc	sj�fdd�}t�trdnd}tj||d��6}|�t��jd�|�t��jtj	�|j
s\t�W5QRXdS)Ncs2|�d�s|�d�rt�d�S�|f|�|�SdS)N�
AC0/online�	AC/online�1�r�r{r}r~r�r1r2r��s
z@TestSensorsBattery.test_emulate_power_plugged.<locals>.open_mockr�r�rT)r<rrr�r�r�r��
power_pluggedZsecsleftZPOWER_TIME_UNLIMITEDr�r��r�r�r�r�r1r�r2�test_emulate_power_plugged�s�z-TestSensorsBattery.test_emulate_power_pluggedc	sV�fdd�}t�trdnd}tj||d��"}|�t��jd�|jsHt	�W5QRXdS)NcsN|�d�s|�d�r"ttjd��n(|�d�r:t�td��S�|f|�|�SdS)Nr�r�rP�/statusZcharging�r�r�r�r�r{r|rr~r�r1r2r��s

zBTestSensorsBattery.test_emulate_power_plugged_2.<locals>.open_mockr�r�rT�
r<rrr�r�r�r�r�r�r�r�r1r�r2�test_emulate_power_plugged_2�sz/TestSensorsBattery.test_emulate_power_plugged_2c	sV�fdd�}t�trdnd}tj||d��"}|�t��jd�|jsHt	�W5QRXdS)Ncs2|�d�s|�d�rt�d�S�|f|�|�SdS)Nr�r��0r�r~r�r1r2r��s
zDTestSensorsBattery.test_emulate_power_not_plugged.<locals>.open_mockr�r�rFr�r�r1r�r2�test_emulate_power_not_plugged�sz1TestSensorsBattery.test_emulate_power_not_pluggedc	sV�fdd�}t�trdnd}tj||d��"}|�t��jd�|jsHt	�W5QRXdS)NcsN|�d�s|�d�r"ttjd��n(|�d�r:t�td��S�|f|�|�SdS)Nr�r�rPr�Zdischargingr�r~r�r1r2r��s

zFTestSensorsBattery.test_emulate_power_not_plugged_2.<locals>.open_mockr�r�rFr�r�r1r�r2� test_emulate_power_not_plugged_2�sz3TestSensorsBattery.test_emulate_power_not_plugged_2c	sT�fdd�}t�trdnd}tj||d�� }|�t��j�|jsFt	�W5QRXdS)NcsJ|�d�s|�d�r"ttjd��n$|�d�r6t�d�S�|f|�|�SdS)N�"/sys/class/power_supply/AC0/online�!/sys/class/power_supply/AC/onlinerP�#/sys/class/power_supply/BAT0/statuss???)rar�r�r�r{r}r~r�r1r2r�s
�

zETestSensorsBattery.test_emulate_power_undetermined.<locals>.open_mockr�r�r)
r<rrr�r"r�r�r�r�r�r�r1r�r2�test_emulate_power_undetermineds	z2TestSensorsBattery.test_emulate_power_undeterminedc	Cs6tdd��"}|�t��jd�|js(t�W5QRXdS)N�(/sys/class/power_supply/BAT0/energy_fullr�r)r�r�r�r�r�r�r�r�r1r1r2�test_emulate_energy_full_0s�z-TestSensorsBattery.test_emulate_energy_full_0cCshtdttjd���Ltdttjd���.tdd��|�t��jd�W5QRXW5QRXW5QRXdS)Nr�rPz(/sys/class/power_supply/BAT0/charge_fullz%/sys/class/power_supply/BAT0/capacitys88�X)	r�r�r�r�r�r�r�r�r��r�r1r1r2�"test_emulate_energy_full_not_avails
�
��z5TestSensorsBattery.test_emulate_energy_full_not_availcCsntdttjd���Rtdttjd���4tdttjd���|�t��j�W5QRXW5QRXW5QRXdS)Nr�rPr�r�)r�r�r�r�r"r�r�r�r�r1r1r2�test_emulate_no_power's
�
�
�z(TestSensorsBattery.test_emulate_no_powerN)r�r�r�rr%rr�r�r�r�r�r�r�r�r�r1r1r1r2r��s

r�c@seZdZdd�ZdS)�TestSensorsBatteryEmulatedc
sx�fdd�}t�trdnd}tjddgd��.}tj||d��}|�t���W5QRXW5QRX|jsjt�|jstt�dS)	Ncs\|�d�rt�td��S|�d�r0t�td��S|�d�rHt�td��S�|f|�|�SdS)Nz/energy_nowZ60000000z
/power_now�0z/energy_fullZ60000001�r�r{r|rr~r�r1r2r�9s


z5TestSensorsBatteryEmulated.test_it.<locals>.open_mockr�r�z
os.listdirZBAT0r-r)	r<rrr�ZassertIsNotNoner�r�r�r�)r�r�r�ZmlistdirZmopenr1r�r2�test_it8s
"
z"TestSensorsBatteryEmulated.test_itN)r�r�r�r�r1r1r1r2r�5sr�c@seZdZdd�Zdd�ZdS)�TestSensorsTemperaturesc
s��fdd�}t�trdnd}tj||d��jtjddgd��Nt��d	d
}|�|jd�|�|jd�|�|j	d
�|�|j
d�W5QRXW5QRXdS)Ncs�|�d�rt�td��S|�d�r0t�td��S|�d�rDt�d�S|�d�rXt�d�S|�d	�rlt�d
�S�|f|�|�SdS)N�/namerz/temp1_label�labelz/temp1_input�30000z
/temp1_maxs40000z/temp1_crit�50000)r�r{r|rr}r~r�r1r2r�Ps







zCTestSensorsTemperatures.test_emulate_class_hwmon.<locals>.open_mockr�r�rr,z/sys/class/hwmon/hwmon0/temp1r-rrr��>@gD@�I@�r<rrr�r�Zsensors_temperaturesr�r�rMZhigh�critical)r�r�r��tempr1r�r2�test_emulate_class_hwmonOs�z0TestSensorsTemperatures.test_emulate_class_hwmonc
s��fdd�}dd�}t�tr dnd}tj||d��jtjdd	|d
��Nt��dd}|�|jd
�|�|jd�|�|j	d�|�|j
d�W5QRXW5QRXdS)Ncsl|�d�rt�d�S|�d�r(t�d�S|�d�r@t�td��S|�d�rXt�td��S�|f|�|�SdS)	NZ0_temprrr�Z0_typer�typer)r�r{r}r|rr~r�r1r2r�ks





zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.open_mockcSs:|dkrgS|dkrgS|dkr&dgS|dkr6ddgSgS)Nz/sys/class/hwmon/hwmon*/temp*_*z&/sys/class/hwmon/hwmon*/device/temp*_*z /sys/class/thermal/thermal_zone*z /sys/class/thermal/thermal_zone0z,/sys/class/thermal/thermal_zone0/trip_point*z2/sys/class/thermal/thermal_zone1/trip_point_0_typez2/sys/class/thermal/thermal_zone1/trip_point_0_tempr1r6r1r1r2�	glob_mockws�zETestSensorsTemperatures.test_emulate_class_thermal.<locals>.glob_mockr�r�rr,Tr�rrrPrrr)r�r�rr�rr1r�r2�test_emulate_class_thermaljsz2TestSensorsTemperatures.test_emulate_class_thermalN)r�r�r�rr	r1r1r1r2r�Lsr�c@seZdZdd�ZdS)�TestSensorsFansc
s��fdd�}t�trdnd}tj||d��Ntjddgd��2t��d	d
}|�|jd�|�|jd�W5QRXW5QRXdS)
Ncs\|�d�rt�td��S|�d�r0t�td��S|�d�rHt�td��S�|f|�|�SdS)Nr�rz/fan1_labelr�z/fan1_inputZ2000r�r~r�r1r2r��s


z4TestSensorsFans.test_emulate_data.<locals>.open_mockr�r�rr,z/sys/class/hwmon/hwmon2/fan1r-rrr�i�)	r<rrr�r�Zsensors_fansr�r�rM)r�r�r�Zfanr1r�r2rO�s
�z!TestSensorsFans.test_emulate_dataN)r�r�r�rOr1r1r1r2r
�sr
c@s�eZdZe�dd��Zdd�Ze�ed�dd��Z	dd	�Z
d
d�Zdd
�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Ze�ed�dd��Zdd �Zd!d"�Zd#d$�Zd%S)&�TestProcesscCs�|��}t�d|�}|�|�}tdd�d|�t�|j�}t�	d�|�
�}|jdd�}|j|j
tdd	�|D��d
d�|j|jtdd	�|D��d
d�|j|jtd
d	�|D��d
d�dS)Nzk
            import time
            with open("%s", "w") as f:
                time.sleep(10)
            cSs
t�d�S)Nru)rrr1r1r1r2r��r�z3TestProcess.test_memory_full_info.<locals>.<lambda>z'%s' not in retg�������?F)ZgroupedcSsg|]}|j|j�qSr1)Z
private_dirtyZ
private_cleanrlr1r1r2rT�sz5TestProcess.test_memory_full_info.<locals>.<listcomp>r�r�cSsg|]
}|j�qSr1)�pssrlr1r1r2rT�scSsg|]
}|j�qSr1)r�rlr1r1r2rT�s)r�r�r�Zpyrunrr�r�r��time�sleep�memory_full_info�memory_mapsr��ussr�rr�)r��testfn�srcZsprocr�r��mapsr1r1r2�test_memory_full_info�s2�

���z!TestProcess.test_memory_full_infoc	Csptdt��t�d�����J}t��}|��}|j	s8t
�|�|jd�|�|j
d�|�|jd�W5QRXdS)N�/proc/%s/smapsa�                fffff0 r-xp 00000000 00:00 0                  [vsyscall]
                Size:                  1 kB
                Rss:                   2 kB
                Pss:                   3 kB
                Shared_Clean:          4 kB
                Shared_Dirty:          5 kB
                Private_Clean:         6 kB
                Private_Dirty:         7 kB
                Referenced:            8 kB
                Anonymous:             9 kB
                LazyFree:              10 kB
                AnonHugePages:         11 kB
                ShmemPmdMapped:        12 kB
                Shared_Hugetlb:        13 kB
                Private_Hugetlb:       14 kB
                Swap:                  15 kB
                SwapPss:               16 kB
                KernelPageSize:        17 kB
                MMUPageSize:           18 kB
                Locked:                19 kB
                VmFlags: rd ex
                ilr�i<)r�rr�r�r�r�r�r�rr�r�r�rrr�)r�r�r�r�r1r1r2�test_memory_full_info_mocked�s
�
z(TestProcess.test_memory_full_info_mockedzunreliable on PYPYc	Csjdd�}|��}t|d��|�||�jd�W5QRXt|d��|�||�jd�W5QRXt|d��|�||�jd�W5QRXt|d��|�||�jd�W5QRXt|d��|�||�jd�W5QRXt|d��|�||�jd�W5QRXt�rft|�t|d	��|�||�jd�W5QRXt|�t|d
��|�||�jd�W5QRXdS)NcSsZt��}t��t}|��D].}|jtj�|�kr:|St��|krqqqtd��dS)Nztimeout looking for test file)	r�r�r
r	�
open_filesr&r�abspathrj)Zfnamer�Z	giveup_at�filer1r1r2�
get_test_file�sz7TestProcess.test_open_files_mode.<locals>.get_test_filer�r^r�zr+zw+za+rNzx+)r�r<r��moderr)r�rrr1r1r2�test_open_files_mode�s*z TestProcess.test_open_files_modec
Cs�t��}|��}t|��d���t|jdt|��tjdt	t
jd�d�� }|��}|r\t�|j
sft�W5QRXtjdt	t
jd�d�� }|�|��g�|j
s�t�W5QRXW5QRXdS)Nr��len(ret) != %i�psutil._pslinux.os.readlinkrPr)r�r�rr<r�rrArr��OSErrorr�r�r�r�ZEINVALr�)r�r��filesr�r1r1r2�test_open_files_file_gones"
�
�z%TestProcess.test_open_files_file_gonec
Cs�t��}|��}t|��d��bt|jdt|��tr<dnd}tj	|t
tjd�d�� }|��}|rht
�|jsrt
�W5QRXW5QRXdS)Nr�rr�r�rPr)r�r�rr<r�rrArrr�r�r�r�r�r�)r�r�r!r�r�r1r1r2�test_open_files_fd_gone s
�z#TestProcess.test_open_files_fd_gonec	CsBtjdid��*}|�tj�t������|j	s4t
�W5QRXdS)Nz)psutil._pslinux._psposix.get_terminal_mapr-)rr�r"r�r!r�rr�Zterminalr�r�r�r1r1r2�test_terminal_mocked2s�z TestProcess.test_terminal_mockedc	Cs�t��}t�td��}tjd|dd��$}|�|��ddg�|j	sFt
�W5QRXt�td��}tjd|dd��&}|�|��dddg�|j	s�t
�W5QRXdS)	Nzfoobarr�Trr��barz	foobarrP�r�r�r{r|rrr�r�Zcmdliner�r��r�r�r#r�r1r1r2�test_cmdline_mocked@s"��zTestProcess.test_cmdline_mockedc	Cs�t��}t�td��}tjd|dd��$}|�|��ddg�|j	sFt
�W5QRXt�td��}tjd|dd��&}|�|��dddg�|j	s�t
�W5QRXdS)	Nzfoo bar r�Trr�r%z	foo bar  rPr&r'r1r1r2�test_cmdline_spaces_mockedNs"��z&TestProcess.test_cmdline_spaces_mockedc	CsTt��}t�td��}tjd|dd��$}|�|��ddg�|j	sFt
�W5QRXdS)Nzfoo barr�Trr�r%r&r'r1r1r2�test_cmdline_mixed_separators\s�z)TestProcess.test_cmdline_mixed_separatorsc	CsFtjddd��.|�t����d�|�t����d�W5QRXdS)Nrz/home/foo (deleted)r-z	/home/foo)rr�r�r�r��exe�cwdr�r1r1r2�!test_readlink_path_deleted_mockedfs
�z-TestProcess.test_readlink_path_deleted_mockedc	s��fdd�}t�trdnd}tj||d��(}t����}|jsBt�|�	|g�W5QRX�fdd�}tj||d��|�
tjt��j�W5QRXdS)Ncs4|�dt���r ttjd��n�|f|�|�SdS�Nz
/proc/%s/taskrP)rarr�r�r�r�r~r�r1r2r�qsz2TestProcess.test_threads_mocked.<locals>.open_mockr�r�rcs4|�dt���r ttjd��n�|f|�|�SdSr.)rarr�r�r�ZEPERMr~r�r1r2r��s)r<rrr�r�r�r�r�r�r�r��AccessDenied)r�r�r�r�r�r1r�r2�test_threads_mockedls
zTestProcess.test_threads_mockedcCs�tjdttjd�d���}tjdt�dd�d��`}t����}|j	sFt
�|j	sPt
�|�|d�tjddd��|�tj
t��j�W5QRXW5QRXW5QRXdS)	Nzpsutil._pslinux.readlinkrPrzpsutil.Process.cmdlinerzpsutil._pslinux.os.path.lexistsFr-)rr�r r�r�r�r/r�r+r�r�r�r��
ZombieProcess)r�r0r1r�r1r1r2�test_exe_mocked�s&
�
�

��zTestProcess.test_exe_mockedc
CsZtdt��ttjd���6}t��}|�t	��|�
�W5QRX|jsLt�W5QRXdS)NrrP)
r�rr�r�r�r�r�r�r�rrr�r�)r�r�r�r1r1r2�test_issue_1014�s

�zTestProcess.test_issue_1014r4c
Cs�tjdttjd�d��D}t��}|��|�tj	��}|�
tj�W5QRX|jsVt
�W5QRX|�|jj|j�|�|jj|���dS)Nzpsutil._pslinux.prlimitrPr)rr�r r�ZENOSYSr�r�rr�r1ZrlimitZ
RLIMIT_NOFILEr�r�r��	exceptionr��r�r�r�r�r1r1r2�test_rlimit_zombie�s
�zTestProcess.test_rlimit_zombiec
Cs�tjdttjd�d��@}t��}|��|�tj	��}|�
�W5QRX|jsRt�W5QRX|�
|jj|j�|�
|jj|���dS)NrrPr)rr�r r�r�r�r�rr�r1r,r�r�r�r4r�r5r1r1r2�test_cwd_zombie�s
�zTestProcess.test_cwd_zombiec*Cs\ddlm}dddddddddddddddd	d
dddddddddddddddddddddddddg*}d
�|���}tdt��|���t��}|�	|�
�d�|�	|��tj�|�	|�
�d�|�	|��d|t���|��}|�	|jd|�|�	|jd|�|�	|jd|�|�	|jd|�|�	|jd|�|�	|��d�W5QRXdS)Nr)�CLOCK_TICKSr�z(cat)�Z�1�2�3�4�5�6�7rqz
/proc/%s/stat�catrmr�r�r�r:rnr�)r�r8rCr�r�rr�r�r�r�r�statusZ
STATUS_ZOMBIE�ppidZcreate_timer�r�r��system�
children_user�children_systemZiowaitZcpu_num)r�r8r�r�r�Zcpur1r1r2�test_stat_file_parsing�sz�,�z"TestProcess.test_stat_file_parsingc	Cs�tdt��t�d������t��}|�|�	�j
d�|�|�	�jd�|�|��d�|�
�}|�|jd�|�|jd�|�|jd�|��}|�|jd	�|�|jd
�|�|jd�|�|j��ttdd
���W5QRXdS)Nr�a                Uid:	1000	1001	1002	1003
                Gid:	1004	1005	1006	1007
                Threads:	66
                Cpus_allowed:	f
                Cpus_allowed_list:	0-7
                voluntary_ctxt_switches:	12
                nonvoluntary_ctxt_switches:	13r��
�Bi�i�i�i�i�i�rr�)r�rr�r�r�r�r�r�r��num_ctx_switches�	voluntary�involuntary�num_threads�uids�realZ	effectiveZsaved�gids�_proc�_get_eligible_cpus�listr@)r�r�rNrPr1r1r2�test_status_file_parsings"
�
z$TestProcess.test_status_file_parsingN)r�r�r�rrrrr%rrr"r#r$r(r)r*r-r0r2r3r
r6r7rGrTr1r1r1r2r�s(
#

$

?rc@sreZdZdZedd��Zdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Ze
�dd��Zdd�Zdd�ZdS)�TestProcessAgainstStatusa/proc/pid/stat and /proc/pid/status have many values in common.
    Whenever possible, psutil uses /proc/pid/stat (it's faster).
    For all those cases we check that the value found in
    /proc/pid/stat (by psutil) matches the one found in
    /proc/pid/status.
    cCst��|_dSrL)r�r��proc)�clsr1r1r2�
setUpClass%sz#TestProcessAgainstStatus.setUpClassc
Cs�tj�d|jj���}|D]h}|��}|�|�r|�d�d}zt|�WW5QR�St	k
r�|YW5QR�SXqt	d|��W5QRXdS)Nr��	r�z
can't find %r)
r��_psplatformZ	open_textrVr�rrra�	partitionrdr?)r�Z	linestartrFrGrr1r1r2�read_status_file)s
�
z)TestProcessAgainstStatus.read_status_filecCs |�d�}|�|j��|�dS)NzName:)r\r�rVr�r�rr1r1r2�	test_name6s
z"TestProcessAgainstStatus.test_namecCsH|�d�}||�d�d|�d��}|�dd�}|�|j��|�dS)NzState:�(rm�)rqr	)r\�find�rfindr�r�rVrBr]r1r1r2�test_status:s
z$TestProcessAgainstStatus.test_statuscCs |�d�}|�|j��|�dS)NzPPid:)r\r�rVrCr]r1r1r2�	test_ppid@s
z"TestProcessAgainstStatus.test_ppidcCs |�d�}|�|j��|�dS)NzThreads:)r\r�rVrMr]r1r1r2�test_num_threadsDs
z)TestProcessAgainstStatus.test_num_threadscCs:|�d�}ttt|��dd���}|�|j��|�dS)NzUid:rmr:)r\rwrxrdr>r�rVrNr]r1r1r2�	test_uidsHs
z"TestProcessAgainstStatus.test_uidscCs:|�d�}ttt|��dd���}|�|j��|�dS)NzGid:rmr:)r\rwrxrdr>r�rVrPr]r1r1r2�	test_gidsMs
z"TestProcessAgainstStatus.test_gidscCs@|�d�}|�|j��j|�|�d�}|�|j��j|�dS)Nzvoluntary_ctxt_switches:znonvoluntary_ctxt_switches:)r\r�rVrJrKrLr]r1r1r2�test_num_ctx_switchesRs

z.TestProcessAgainstStatus.test_num_ctx_switchescCsN|�d�}dt|�krJtt|�d��\}}|�|j��tt	||d���dS)N�Cpus_allowed_list:r	rm)
r\r�rxrdr>r�rVZcpu_affinityrSr@)r�rZmin_Zmax_r1r1r2�test_cpu_affinityYs
�z*TestProcessAgainstStatus.test_cpu_affinityc	CsR|�d�}t�d��}|jj��W5QRXdt|�krD|jrNt�n
|jsNt�dS)Nrizpsutil._pslinux.per_cpu_timesr	)	r\rr�rVrQrRr�r�r�)r�rr�r1r1r2�test_cpu_affinity_eligible_cpus`s
z8TestProcessAgainstStatus.test_cpu_affinity_eligible_cpusN)r�r�r��__doc__�classmethodrXr\r^rcrdrerfrgrrhrjrkr1r1r1r2rUs


rUc@seZdZdd�Zdd�ZdS)�	TestUtilsc	Cs<tjddd��$}|�tj�d�d�|js.t�W5QRXdS)Nzos.readlinkz
foo (deleted)r-r%r�)rr�r�r�rZ�readlinkr�r�r�r1r1r2�
test_readlinkrszTestUtils.test_readlinkc	Csx|��}t|d��}|�d�W5QRX|�tjj|dd�d�|�tjj|dd�d�|�tjj|dd	d
�d	�dS)NZwtzfoo F)Zbinaryr�Tsfooz??r%)Zfallback)r�r<r�r�r�rZrA)r�rrFr1r1r2�test_catws�zTestUtils.test_catN)r�r�r�rprqr1r1r1r2rnosrn�__main__)�
run_from_name)]rlZ
__future__rrbr&r�Zglobr{rrr�r#r,r�r
r�r�rZpsutil._compatrrrrZpsutil.testsrr	r
rrr
rrrrrrrrrrrrrr&r�dirname�__file__ZHEREr+ZSIOCGIFCONFrVr4r6r�ZEMPTY_TEMPERATURESr3r5r7rKrYrkrprtry�contextmanagerr�r�r%r�r�r�rr(r3rWr]rbrgror}r�r�r�r�r�r�r
rrUrnr�Zpsutil.tests.runnerrsr1r1r1r2�<module>s�


	

.]?
)- ?
?}ArR