[Webtest] Couple of contributions.
Lyvers, Wiiliam
webtest@lists.canoo.com
Wed, 8 May 2002 08:44:53 -0400
This is a multi-part message in MIME format.
------_=_NextPart_001_01C1F68E.2642AB25
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
I am not exactly sure on webtest's method of contribution, but here are
a couple custom steps that others might find useful. =20
1. DebugForm - This step is only used while developing the webtest. It
basically will attempt to dump debug information about the forms
contained in the last response. Instead of digging through the raw html
that was saved off, this will dump just the elements within a particular
form or all the forms in the last response. We found this extremely
useful for debugging why a form isn't submitting. Our app server spews
horrific looking html that isn't very easy to dig thru :).
<debugform/>
2. MetaRefresh. Our site uses client side meta refreshes to poll the
server when a expensive task is being performed. This step allows us to
simulate the meta refresh that a browser performs. It refreshes until
it finds the text contained in the untilText attribute. The reason for
this attribute was that our site and most sites that I have used have a
30 - 60 minute metarefresh in every page which is used to redirect a
user if the user's session has timed out. So this step will basically
poll until a different result page is returned -- the final result page
would then contain the longer metarefresh element necessary for session
timeouts. The maxAttempts attribute was added in case the polling was
broken - this allows the test suite to finish.
<metarefresh stepId=3D"Meta Refresh Page" untilText=3D"Results"
maxAttempts=3D"30"/> =09
<<MetaRefresh.java>> <<DebugForm.java>> <<patch.txt>>=20
> The information contained in this communication may be confidential,
> is intended only for the use of the recipient named above, and may be
> legally privileged. If the reader of this message is not the intended
> recipient, you are hereby notified that any dissemination,
> distribution, or copying of this communication, or any of its
> contents, is strictly prohibited. If you have received this
> communication in error, please re-send this communication to the
> sender and delete the original message and any copy of it from your
> computer system.
>=20
------_=_NextPart_001_01C1F68E.2642AB25
Content-Type: application/octet-stream;
name="MetaRefresh.java"
Content-Transfer-Encoding: base64
Content-Description: MetaRefresh.java
Content-Disposition: attachment;
filename="MetaRefresh.java"
Ly8gQ29weXJpZ2h0IKkgMjAwMiBDYW5vbyBFbmdpbmVlcmluZyBBRywgU3dpdHplcmxhbmQuDQpw
YWNrYWdlIGNvbS5jYW5vby53ZWJ0ZXN0LnN0ZXBzOw0KDQppbXBvcnQgY29tLmNhbm9vLndlYnRl
c3QuZW5naW5lLio7DQppbXBvcnQgb3JnLnczYy5kb20uKjsNCmltcG9ydCBvcmcueG1sLnNheC5T
QVhFeGNlcHRpb247DQppbXBvcnQgY29tLm1ldGVyd2FyZS5odHRwdW5pdC5XZWJGb3JtOw0KDQpp
bXBvcnQgamF2YS51dGlsLio7DQppbXBvcnQgamF2YS5pby4qOw0KDQovKioNCiAqIFRoaXMgY2xh
c3MgcGVyZm9ybXMgbWV0YXJlZnJlc2ggdW50aWwgYSBzdHJpbmcgaXMgZm91bmQgb3IgbWF4IGF0
dGVtcHRzIGhhcw0KICogYmVlbiByZWFjaGVkLg0KICoNCiAqIEBhdXRob3IgV2lsbGlhbSBMWXZl
cnMNCiAqLw0KcHVibGljIGNsYXNzIE1ldGFSZWZyZXNoIGV4dGVuZHMgVGFyZ2V0IHsNCgkNCglw
cml2YXRlIFN0cmluZyBfdW50aWxUZXh0Ow0KCQ0KCXByaXZhdGUgaW50IF9tYXhBdHRlbXB0czsN
CgkNCgkvKioNCiAgICAgKiBDJ3RvciB1c2VkIGZvciBpbnN0YW5jZSBjcmVhdGlvbiBhcyBuZXN0
ZWQgZWxlbWVudCBieSBhbnQNCiAgICAgKi8NCiAgICBwdWJsaWMgTWV0YVJlZnJlc2goKSB7DQog
ICAgICAgIHN1cGVyKCk7DQogICAgfQ0KCQ0KCXB1YmxpYyB2b2lkIHNldFVudGlsVGV4dCggU3Ry
aW5nIHZhbHVlICkgew0KCQlfdW50aWxUZXh0ID0gdmFsdWU7DQoJfQ0KCQ0KCXB1YmxpYyBTdHJp
bmcgZ2V0VW50aWxUZXh0KCkgew0KCQlyZXR1cm4gX3VudGlsVGV4dDsNCgl9DQoJDQoJcHVibGlj
IHZvaWQgc2V0TWF4QXR0ZW1wdHMoIGludCB2YWx1ZSApIHsNCgkJX21heEF0dGVtcHRzID0gdmFs
dWU7DQoJfQ0KCQ0KCXB1YmxpYyBpbnQgZ2V0TWF4QXR0ZW1wdHMoKSB7DQoJCXJldHVybiBfbWF4
QXR0ZW1wdHM7DQoJfQ0KCQ0KCS8qKg0KCSAqIEV4ZWN1dGVzIHRoZSBNZXRhUmVmcmVzaCBzdGVw
Lg0KCSAqDQoJICogQHBhcmFtIGNvbnRleHQgVGhlIHRlc3QgY29udGV4dCB0byB3b3JrIGluLg0K
CSAqLw0KCXByb3RlY3RlZCB2b2lkIGRvRXhlY3V0ZShUZXN0Q29udGV4dCBjb250ZXh0KSB0aHJv
d3MgRXhjZXB0aW9uIHsNCgkJDQoJCWZvciggaW50IGk9MDsgaSA8IF9tYXhBdHRlbXB0czsgaSsr
ICkgew0KCQkJU3RyaW5nIG1ldGFDb250ZW50ID0gZ2V0TWV0YUNvbnRlbnQoIGNvbnRleHQgKTsN
CgkJCWlmKCBtZXRhQ29udGVudCAhPSBudWxsICkgew0KCQkJCVN0cmluZ1Rva2VuaXplciBzdCA9
IG5ldyBTdHJpbmdUb2tlbml6ZXIoIG1ldGFDb250ZW50LCI7IiApOw0KCQkJCWlmKCBzdC5jb3Vu
dFRva2VucygpID09IDIgKSB7DQoJCQkJCWludCB0aW1lID0gSW50ZWdlci5wYXJzZUludChzdC5u
ZXh0VG9rZW4oKSk7DQoJCQkJCVN0cmluZyB1cmwgPSBzdC5uZXh0VG9rZW4oKS50cmltKCkuc3Vi
c3RyaW5nKCA0ICk7DQoJCQkJCXVybCA9IGNvbnRleHQuZ2V0VGVzdFNwZWNpZmljYXRpb24oKS5n
ZXRDb25maWcoKS4NCgkJCQkJCWdldFVybEZvclBhZ2UodXJsKTsNCgkJCQkJbG9nVGV4dChjb250
ZXh0LCAiU2xlZXBpbmcgIiArIHRpbWUgKyAiIHNlY29uZHMuXG4iKTsNCgkJCQkJVGhyZWFkLmN1
cnJlbnRUaHJlYWQoKS5zbGVlcCggdGltZSAqIDEwMDAgKTsNCgkJCQkJbG9nVGV4dChjb250ZXh0
LCAiUmVmcmVzaGluZyAiICsgdXJsICsgIiBcbiIpOw0KCQkJCQlnb3RvVGFyZ2V0KCBjb250ZXh0
LCB1cmwgKTsNCgkJCQkJaWYoIGNvbnRleHQuZ2V0TGFzdFJlc3BvbnNlKCkuZ2V0VGV4dCgpLmlu
ZGV4T2YoIA0KCQkJCQkJX3VudGlsVGV4dCApICE9IC0xICkgew0KCQkJCQkJbG9nVGV4dCggY29u
dGV4dCwgIkZvdW5kOiAiICsgX3VudGlsVGV4dCArICJcbiIpOw0KCQkJCQkJcmV0dXJuOw0KCQkJ
CQl9DQoJCQkJfSBlbHNlIHsNCgkJCQkJdGhyb3cgbmV3IFRlc3RTdGVwU2V0dXBFcnJvcigiTWV0
YSByZWZyZXNoIHRhZyBjb3JydXB0OiAiICsgbWV0YUNvbnRlbnQsIHRoaXMgKTsNCgkJCQl9DQoJ
CQl9IGVsc2Ugew0KCQkJCXRocm93IG5ldyBUZXN0U3RlcFNldHVwRXJyb3IoIk1ldGEgcmVmcmVz
aCBlbGVtZW50IG1pc3NpbmcgZnJvbSBwYWdlLiIsIHRoaXMgKTsNCgkJCX0NCgkJfQ0KCQl0aHJv
dyBuZXcgVGVzdFN0ZXBGYWlsZWRFcnJvciggIlBhZ2Ugd2l0aCB0ZXh0ICIgKyBfdW50aWxUZXh0
ICsgIiB3YXMgbm90IGZvdW5kIGluIG1heCBhdHRlbXB0cyAiICsgDQoJCQlfbWF4QXR0ZW1wdHMs
IHRoaXMpOw0KICAgIH0JDQoJCQ0KCXByaXZhdGUgU3RyaW5nIGdldE1ldGFDb250ZW50KCBUZXN0
Q29udGV4dCBjb250ZXh0ICkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7DQoJCU5vZGVMaXN0IHJlc3Vs
dCA9IGNvbnRleHQuZ2V0TGFzdFJlc3BvbnNlKCkuZ2V0RE9NKCkuDQoJCQlnZXRFbGVtZW50c0J5
VGFnTmFtZSgibWV0YSIpOw0KDQoJCU5vZGUgbm9kZSA9IG51bGw7DQoJCWZvciAoaW50IGkgPSAw
OyBpIDwgcmVzdWx0LmdldExlbmd0aCgpOyBpKyspIHsNCgkJCW5vZGUgPSByZXN1bHQuaXRlbSgg
aSApOw0KCQkJTm9kZSBodHRwRXF1aXYgPSBub2RlLmdldEF0dHJpYnV0ZXMoKS5nZXROYW1lZEl0
ZW0oImh0dHAtZXF1aXYiKTsNCgkJCWlmKCBodHRwRXF1aXYgIT0gbnVsbCAmJiAiUmVmcmVzaCIu
ZXF1YWxzSWdub3JlQ2FzZSgNCgkJCQlodHRwRXF1aXYuZ2V0Tm9kZVZhbHVlKCkgKSApIHsNCgkJ
CQlyZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGVzKCkuZ2V0TmFtZWRJdGVtKCJjb250ZW50IikuDQoJ
CQkJCWdldE5vZGVWYWx1ZSgpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBudWxsOw0KCX0NCn0=
------_=_NextPart_001_01C1F68E.2642AB25
Content-Type: application/octet-stream;
name="DebugForm.java"
Content-Transfer-Encoding: base64
Content-Description: DebugForm.java
Content-Disposition: attachment;
filename="DebugForm.java"
Ly8gQ29weXJpZ2h0IKkgMjAwMiBDYW5vbyBFbmdpbmVlcmluZyBBRywgU3dpdHplcmxhbmQuDQpw
YWNrYWdlIGNvbS5jYW5vby53ZWJ0ZXN0LnN0ZXBzOw0KDQppbXBvcnQgY29tLmNhbm9vLndlYnRl
c3QuZW5naW5lLio7DQppbXBvcnQgY29tLmNhbm9vLndlYnRlc3QuaW50ZXJmYWNlcy5JTG9nZ2Vy
Ow0KaW1wb3J0IG9yZy53M2MuZG9tLio7DQppbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9u
Ow0KaW1wb3J0IGNvbS5tZXRlcndhcmUuaHR0cHVuaXQuV2ViRm9ybTsNCmltcG9ydCBjb20ubWV0
ZXJ3YXJlLmh0dHB1bml0LldlYlJlcXVlc3Q7DQoNCmltcG9ydCBqYXZhLnV0aWwuKjsNCmltcG9y
dCBqYXZhLmlvLio7DQoNCi8qKg0KICogVGhpcyBjbGFzcyBvdXRwdXRzIGRlYnVnIGluZm9ybWF0
aW9uIGZvciB0aGUgY3VycmVudCBmb3Jtcy4gIA0KICoNCiAqIEBhdXRob3IgV2lsbGlhbSBMeXZl
cnMNCiAqLw0KcHVibGljIGNsYXNzIERlYnVnRm9ybSBleHRlbmRzIEFic3RyYWN0VGVzdFN0ZXBT
cGVjaWZpY2F0aW9uIHsNCgkNCgkvKiogQm9vbGVhbiBvbiB3aGV0aGVyIHRvIHNob3cgb3B0aW9u
cyBvciBub3QgKi8NCglwcml2YXRlIGJvb2xlYW4gX3Nob3dPcHRpb25zID0gdHJ1ZTsNCgkNCgkv
KiogQm9vbGVhbiBvbiB3aGV0aGVyIHRvIHNob3cgaGlkZGVuIGlucHV0cyBvciBub3QuICovDQoJ
cHJpdmF0ZSBib29sZWFuIF9zaG93SGlkZGVuSW5wdXRzID0gZmFsc2U7DQoJDQoJLyoqIEhvbGQg
dmFsdWUgb2YgZm9ybSBuYW1lIHRvIGRlYnVnICovDQoJcHJpdmF0ZSBTdHJpbmcgX2Zvcm1OYW1l
Ow0KDQoJLyoqDQogICAgICogQyd0b3IgdXNlZCBmb3IgaW5zdGFuY2UgY3JlYXRpb24gYXMgbmVz
dGVkIGVsZW1lbnQgYnkgYW50DQogICAgICovDQogICAgcHVibGljIERlYnVnRm9ybSgpIHsNCiAg
ICAgICAgc3VwZXIoKTsNCiAgICB9DQoJDQoJLyoqDQoJICogU2V0cyB0aGUgZm9ybW5hbWUgdG8g
cHJpbnQgb3V0IGRlYnVnIGluZm9ybWF0aW9uIG9uLg0KCSAqLw0KCXB1YmxpYyB2b2lkIHNldEZv
cm1OYW1lKCBTdHJpbmcgdmFsdWUgKSB7DQoJCV9mb3JtTmFtZSA9IHZhbHVlOw0KCX0NCgkNCgkv
KioNCgkgKiBHZXRzIHRoZSBmb3JtbmFtZSB0byBwcmludCBvdXQgZGVidWcgaW5mb3JtYXRpb24g
b24uDQoJICovDQoJcHVibGljIFN0cmluZyBnZXRGb3JtTmFtZSgpIHsNCgkJcmV0dXJuIF9mb3Jt
TmFtZTsNCgl9DQoJDQoJLyoqDQoJICogU2V0cyBzaG93T3B0aW9ucyBhdHRyaWJ1dGUuIERlZmF1
bHRzIHRvIHRydWUuDQoJICovDQoJcHVibGljIHZvaWQgc2V0U2hvd09wdGlvbnMoIGJvb2xlYW4g
c2hvd09wdGlvbnMgKSB7DQoJCV9zaG93T3B0aW9ucyA9IHNob3dPcHRpb25zOw0KCX0NCgkNCgkv
KioNCgkgKiBHZXRzIHNob3dPcHRpb25zIGF0dHJpYnV0ZS4NCgkgKi8NCglwdWJsaWMgYm9vbGVh
biBnZXRTaG93T3B0aW9ucygpIHsNCgkJcmV0dXJuIF9zaG93T3B0aW9uczsNCgl9DQoJDQoJLyoq
IA0KCSAqIFNldHMgc2hvd0hpZGRlbklucHV0cyBhdHRyaWJ1dGUuIERlZmF1bHRzIHRvIGZhbHNl
Lg0KCSAqLw0KCXB1YmxpYyB2b2lkIHNldFNob3dIaWRkZW5JbnB1dHMoIGJvb2xlYW4gc2hvd0hp
ZGRlbklucHV0cyApIHsNCgkJX3Nob3dIaWRkZW5JbnB1dHMgPSBzaG93SGlkZGVuSW5wdXRzOw0K
CX0NCgkNCgkvKioNCgkgKiBHZXRzIHNob3dIaWRkZW5JbnB1dHMgYXR0cmlidXRlLg0KCSAqLw0K
CXB1YmxpYyBib29sZWFuIGdldFNob3dIaWRkZW5JbnB1dHMoKSB7DQoJCXJldHVybiBfc2hvd0hp
ZGRlbklucHV0czsNCgl9DQoNCgkvKioNCgkgKiBFeGVjdXRlcyB0aGUgRGVidWdGb3JtIHN0ZXAu
ICBCYXNpY2FsbHkgb3V0cHV0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUNCgkgKiBmb3JtIHRvIHRo
ZSBzY3JlZW4uDQoJICoNCgkgKiBAcGFyYW0gY29udGV4dCBUaGUgdGVzdCBjb250ZXh0IHRvIHdv
cmsgaW4uDQoJICovDQoJcHJvdGVjdGVkIHZvaWQgZG9FeGVjdXRlKFRlc3RDb250ZXh0IGNvbnRl
eHQpIHRocm93cyBFeGNlcHRpb24gew0KCQlTdHJpbmdXcml0ZXIgYnVmZmVyID0gbmV3IFN0cmlu
Z1dyaXRlcigpOw0KCQlQcmludFdyaXRlciB3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoIGJ1ZmZl
ciApOwkJCQkNCgkJDQoJCVdlYkZvcm1bXSBmb3JtcyA9IG51bGw7DQoJCWlmKCBfZm9ybU5hbWUg
PT0gbnVsbCB8fCBfZm9ybU5hbWUudHJpbSgpLmVxdWFscygiIikgKSB7DQoJCQlmb3JtcyA9IGdl
dFZhbGlkRm9ybXMoIGNvbnRleHQsIG51bGwgKTsNCgkJfSBlbHNlIHsNCgkJCWZvcm1zID0gZ2V0
VmFsaWRGb3JtcyggY29udGV4dCwgX2Zvcm1OYW1lICk7DQoJCX0NCgkJaWYoIGZvcm1zID09IG51
bGwgfHwgZm9ybXMubGVuZ3RoID09IDAgKSB7DQoJCQl3cml0ZXIucHJpbnRsbigiTk8gRk9STSBX
SVRIIE5BTUU6ICIgKyBfZm9ybU5hbWUgKTsNCgkJfQ0KCQkNCgkJLy8gcHJpbnQgZm9ybXMNCgkJ
cHJpbnRGb3Jtcyggd3JpdGVyLCBmb3JtcywgY29udGV4dCApOw0KCQkNCgkJLy8gb3V0cHV0IGJ1
ZmZlciB0byBsb2dnZXIuDQoJCUlMb2dnZXIgbG9nZ2VyID0gY29udGV4dC5nZXRUZXN0U3BlY2lm
aWNhdGlvbigpLmdldENvbmZpZygpLmdldExvZ2dlcigpOw0KCQlsb2dnZXIubG9nKCBidWZmZXIu
dG9TdHJpbmcoKSApOw0KICAgIH0NCgkNCgkvKioNCgkgKiBVdGlsaXR5IG1ldGhvZCB0aGF0IHBy
aW50cyBpbmZvcm1hdGlvbiBhYm91dCBmb3JtcyB0byB3cml0ZXIuDQoJICovDQoJcHJpdmF0ZSB2
b2lkIHByaW50Rm9ybXMoIFByaW50V3JpdGVyIHdyaXRlciwgV2ViRm9ybVtdIGZvcm1zLCANCgkJ
VGVzdENvbnRleHQgY29udGV4dCApIHsNCgkJDQoJCUxpc3QgaGlkZGVuUGFyYW1zID0gbnVsbDsN
CgkJaWYoICFfc2hvd0hpZGRlbklucHV0cyApIHsNCgkJCWhpZGRlblBhcmFtcyA9IGdldEhpZGRl
blBhcmFtcyggY29udGV4dCApOw0KCQl9IGVsc2Ugew0KCQkJaGlkZGVuUGFyYW1zID0gbmV3IEFy
cmF5TGlzdCgpOw0KCQl9CQkJDQoJCQkNCgkJZm9yKCBpbnQgaT0wOyBpIDwgZm9ybXMubGVuZ3Ro
OyBpKysgKSB7DQoJCQl3cml0ZXIucHJpbnRsbiggIkZPUk0gTkFNRTogIiArIGZvcm1zW2ldLmdl
dE5hbWUoKSApOw0KCQkJU3RyaW5nW10gbmFtZXMgPSBmb3Jtc1tpXS5nZXRQYXJhbWV0ZXJOYW1l
cygpOw0KCQkJZm9yKCBpbnQgaj0wOyBqPCBuYW1lcy5sZW5ndGg7IGorKyApIHsNCgkJCQlTdHJp
bmcgbmFtZSA9IG5hbWVzW2pdOw0KCQkJCXdyaXRlci5wcmludCggbmFtZSApOw0KCQkJCWlmKCAh
aGlkZGVuUGFyYW1zLmNvbnRhaW5zKCBuYW1lICkgKSB7DQoJCQkJCVN0cmluZyB2YWx1ZSA9IGZv
cm1zW2ldLmdldFBhcmFtZXRlclZhbHVlKCBuYW1lICk7DQoJCQkJCWlmKCB2YWx1ZSAhPSBudWxs
ICkgew0KCQkJCQkJd3JpdGVyLnByaW50bG4oIiA9ICIgKyB2YWx1ZSApOw0KCQkJCQl9IGVsc2Ug
ew0KCQkJCQkJd3JpdGVyLnByaW50bG4oKTsNCgkJCQkJfQ0KCQkJCQlpZiggX3Nob3dPcHRpb25z
ICkgew0KCQkJCQkJcHJpbnRPcHRpb25zKCB3cml0ZXIsIGZvcm1zW2ldLCBuYW1lICk7DQoJCQkJ
CX0NCgkJCQl9DQoJCQl9DQoJCX0JCQ0KCX0NCgkNCgkvKioNCgkgKiBPdXRwdXRzIG9wdGlvbnMg
Zm9yIGEgZmllbGQgd2l0aGluIGEgd2ViIGZvcm0uDQoJICovDQoJcHJpdmF0ZSB2b2lkIHByaW50
T3B0aW9ucyggUHJpbnRXcml0ZXIgd3JpdGVyLCBXZWJGb3JtIGZvcm0sIFN0cmluZyBuYW1lICkg
ew0KCQlTdHJpbmdbXSBvcHRpb25zID0gZm9ybS5nZXRPcHRpb25zKCBuYW1lICk7DQoJCVN0cmlu
Z1tdIG9wdGlvblZhbHVlcyA9IGZvcm0uZ2V0T3B0aW9uVmFsdWVzKCBuYW1lICk7DQoNCgkJaWYo
IG9wdGlvblZhbHVlcyAhPSBudWxsICYmIG9wdGlvblZhbHVlcy5sZW5ndGggPiAwICkgew0KCQkJ
Zm9yICggaW50IGs9MDsgayA8IG9wdGlvblZhbHVlcy5sZW5ndGg7IGsrKyApIHsNCgkJCQl3cml0
ZXIucHJpbnQoIiAgICAgLSBvcHRpb246ICIgKyANCgkJCQkJb3B0aW9uVmFsdWVzW2tdICk7DQoJ
CQkJaWYoIG9wdGlvbnMubGVuZ3RoID4gayApIHsNCgkJCQkJd3JpdGVyLnByaW50bG4oIiAtPiAi
ICsgb3B0aW9uc1trXSApOw0KCQkJCX0gZWxzZSB7DQoJCQkJCXdyaXRlci5wcmludGxuKCk7DQoJ
CQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCQ0KCS8qKg0KCSAqIENyZWF0ZXMgYSBsaXN0IG9mIGhpZGRl
biBwYXJhbXMgd2l0aGluIHRoZSBjdXJyZW50IHdlYmZvcm1zLg0KCSAqLw0KCXByb3RlY3RlZCBM
aXN0IGdldEhpZGRlblBhcmFtcyAoIFRlc3RDb250ZXh0IGNvbnRleHQgKSB7DQoJCUxpc3QgaGlk
ZGVuVmFsdWVzID0gbmV3IEFycmF5TGlzdCgpOw0KCQl0cnkgew0KCQkJTm9kZUxpc3QgcmVzdWx0
ID0gY29udGV4dC5nZXRMYXN0UmVzcG9uc2UoKS5nZXRET00oKS4NCgkJCQlnZXRFbGVtZW50c0J5
VGFnTmFtZSgiaW5wdXQiKTsNCgkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0LmdldExlbmd0
aCgpOyBpKyspIHsNCgkJCQljaGVja0hpZGRlbiggcmVzdWx0Lml0ZW0oaSksIGhpZGRlblZhbHVl
cyApOw0KCQkJfQ0KCQkJcmVzdWx0ID0gY29udGV4dC5nZXRMYXN0UmVzcG9uc2UoKS5nZXRET00o
KS4NCgkJCQlnZXRFbGVtZW50c0J5VGFnTmFtZSgiSU5QVVQiKTsNCgkJCWZvciAoaW50IGkgPSAw
OyBpIDwgcmVzdWx0LmdldExlbmd0aCgpOyBpKyspIHsNCgkJCQljaGVja0hpZGRlbiggcmVzdWx0
Lml0ZW0oaSksIGhpZGRlblZhbHVlcyApOw0KCQkJfQ0KCQkJDQoJCX0gY2F0Y2ggKFNBWEV4Y2Vw
dGlvbiBleCkgew0KCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7DQoJCX0NCgkJcmV0dXJuIGhpZGRl
blZhbHVlczsNCgl9DQoJDQoJLyoqDQoJICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgcGFzc2VkIGlu
IGN1cnJlbnQgaW5wdXQgbm9kZSBpcyBhIGhpZGRlbiBpbnB1dC4NCgkgKi8NCglwcml2YXRlIHZv
aWQgY2hlY2tIaWRkZW4oIE5vZGUgY3VycmVudE5vZGUsIExpc3QgaGlkZGVuUGFyYW1zICkgew0K
CQlOb2RlIHR5cGUgPSBjdXJyZW50Tm9kZS5nZXRBdHRyaWJ1dGVzKCkuZ2V0TmFtZWRJdGVtKCJ0
eXBlIik7DQoJCWlmKCB0eXBlID09IG51bGwgKSB7DQoJCQl0eXBlID0gY3VycmVudE5vZGUuZ2V0
QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbSgiVFlQRSIpOw0KCQl9DQoJCWlmKCB0eXBlICE9IG51
bGwgJiYgImhpZGRlbiIuZXF1YWxzSWdub3JlQ2FzZSggdHlwZS5nZXROb2RlVmFsdWUoKSApICkg
ew0KCQkJTm9kZSBuYW1lID0gY3VycmVudE5vZGUuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRl
bSgibmFtZSIpOw0KCQkJaWYgKCBuYW1lID09IG51bGwgKSB7DQoJCQkJY3VycmVudE5vZGUuZ2V0
QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbSgiTkFNRSIpOw0KCQkJfQ0KCQkJaWYgKCBuYW1lICE9
IG51bGwgKSB7DQoJCQkJaGlkZGVuUGFyYW1zLmFkZCggbmFtZS5nZXROb2RlVmFsdWUoKSApOw0K
CQkJfQ0KCQl9DQoJfQ0KfQ==
------_=_NextPart_001_01C1F68E.2642AB25
Content-Type: text/plain;
name="patch.txt"
Content-Transfer-Encoding: base64
Content-Description: patch.txt
Content-Disposition: attachment;
filename="patch.txt"
SW5kZXg6IHNyYy9jb20vY2Fub28vd2VidGVzdC9hbnQvVGVzdFN0ZXBTZXF1ZW5jZS5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3JpZXMvY3ZzL3B1YmxpYy93ZWJ0ZXN0L3NyYy9j
b20vY2Fub28vd2VidGVzdC9hbnQvVGVzdFN0ZXBTZXF1ZW5jZS5qYXZhLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjE0CmRpZmYgLXcgLUIgLWIgLWkgLWMgLXUgLXIxLjE0IFRlc3RTdGVwU2VxdWVu
Y2UuamF2YQotLS0gc3JjL2NvbS9jYW5vby93ZWJ0ZXN0L2FudC9UZXN0U3RlcFNlcXVlbmNlLmph
dmEJMjYgQXByIDIwMDIgMTY6MjQ6MDQgLTAwMDAJMS4xNAorKysgc3JjL2NvbS9jYW5vby93ZWJ0
ZXN0L2FudC9UZXN0U3RlcFNlcXVlbmNlLmphdmEJOCBNYXkgMjAwMiAxMjoyNTozNSAtMDAwMApA
QCAtOTksNiArOTksMTggQEAKIAl7CiAJCWZTdGVwcy5hZGQoc3RlcCk7CiAJfQorCQorCXB1Ymxp
YyB2b2lkIGFkZERlYnVnZm9ybSAoRGVidWdGb3JtIHN0ZXApCisJeworCQlzdGVwLnNldFN0ZXBU
eXBlKCJkZWJ1Z2Zvcm0iKTsKKwkJYWRkU3RlcChzdGVwKTsKKwl9CisJCisJcHVibGljIHZvaWQg
YWRkTWV0YXJlZnJlc2ggKE1ldGFSZWZyZXNoIHN0ZXApCisJeworCQlzdGVwLnNldFN0ZXBUeXBl
KCJtZXRhcmVmcmVzaCIpOworCQlhZGRTdGVwKHN0ZXApOworCX0JCQogCiAJcHVibGljIHZvaWQg
YWRkVmVyaWZ5ZWxlbWVudCAoVmVyaWZ5SHRtbEVsZW1lbnROYW1lZCBzdGVwKQogCXsKDQo=
------_=_NextPart_001_01C1F68E.2642AB25--