tag:blogger.com,1999:blog-24326626873094117412024-02-19T00:14:28.038-06:00My Mozilla QA AdventuresI am relatively new to Mozilla, but I hope to do big things here. Join me on my journey.sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.comBlogger36125tag:blogger.com,1999:blog-2432662687309411741.post-37536796516183304542015-06-12T19:35:00.001-05:002015-06-12T19:35:51.450-05:00WWDC Day 4 - ...and that's a wrapAnd the last day...<br />
<br />
<ul>
<li>What's New in Internationalization - Boy, OS X/iOS has a lot of i18n options. Now you can localize how you call people, and provide alternatives for strings based on width. And you should use the options to make your app work with readers of right-to-left text. There are options to simulate these.</li>
<li>What's New in UIKit Dynamics and Visual Effects - So, you can set your views to move around to a number of rules. Isn't that swell? Please don't do this unless you are writing a game. Really. You'll make my wife seasick.</li>
<li>Building Better Apps with Value Types - Swift has a bunch of types that are logically stored by value. This talk was all about the effects of that. By this time, I was completely zoning out, so I'll have to revisit this later.</li>
</ul>
I had lunch with Emily Toop on the Firefox iOS team. She is new to Mozilla, but an experienced iOS developer out of the UK. Lovely venue at the Samovar Tea Lounge in Yerba Buena Gardens.<br />
<br />
Overall impressions of WWDC:<br />
<ul>
<li>It was good to see Apple people, but I no longer miss the place. It was a long time ago that I worked there, and life is much different now.</li>
<li>iOS programming is just fun.</li>
<li>I am ready not to be with huge crowds for a while.</li>
<li>This was not a blockbuster event for Apple; nevertheless, the improvements for both OS X and iOS are real, and interesting.</li>
<li>The food at the conference was not great. Lunch today was terrible, which is why I went offsite.</li>
<li>They finally got enough transmitters out to fix Wi-Fi in the hall, just in time for it all to be over. You would think that after 15 years of Wi-Fi being on their laptops, they would be able to get this right... Of course, the hotel Wi-Fi wasn't any better in the evenings, when everybody left the conference.</li>
<li>My feet hurt.</li>
</ul>
I would be happy to come back next year, but I am not going to push again unless programming the Mac or iOS is my primary job. Lots of good stuff. Also, there are some sessions from last year I need to watch.<br />
sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-41606813912560759042015-06-12T11:56:00.003-05:002015-06-12T11:56:55.315-05:00WWDC Day 3 - Sessions are starting to run together...We are in the thick of things now; next to last day. Sessions I attended:<br />
<br /><ul>
<li>Optimizing Swift Performance - This was a disappointment; it basically was Apple people telling us how Swift is optimized by the compiler, including a mode which does optimization of all of your modules at once. It also demonstrated Xcode's profiling features. While that is interesting, I had been hoping more for how to fix slow Swift code. Don't get me wrong, the presenter demo'd changes in Swift code making his app faster. It was just a different take on the topic than I was expecting.</li>
<li>Continuous Integration in Xcode - XcodeServer is cool. It is not Jenkins. It really wants to run in OS X Server. And it was introduced last year, so the meat of the feature was presented in last year's WWDC. I need to go back and watch that video. This could be very useful for Mozilla's iOS efforts, if we take the time to write tests using XCTest framework. I feel like this is an area I can explore and contribute to the team.</li>
<li>Mysteries of Auto Layout, Parts 1 and 2 - Without having seen the basic talk on Auto Layout in the 2014 WWDC sessions, I was a little lost on how to start this from scratch. Dry, long, but ultimately interesting, I will be glad to watch this again after playing with Auto Layout myself.</li>
<li>CloudKit tips and tricks - Another area I need to go back to 2014. Basically, you can rent space on Apple's servers to provide a back end to your app. Alas, it requires an Apple ID for your users, and I know that will be a barrier to entry.</li>
</ul>
I had lunch with my good buddy Jim Ingham. We worked together at Sun, Cygnus, Red Hat and Apple, off and on from 1997-2006. It was good to see him. I wish I could remember the last name of the other Apple engineer who joined us, Greg. He had been there a few months when I left, and he had moved from Austin (!). It was good to eat a good lunch away from the show.<br />
<br />
I also went to the Apple Bash. They had the band Walk the Moon, and I was pleasantly surprised. There was actually musicianship on display. I am not going to buy anything, but for once, I wasn't counting time until the band stopped.<br />
<br />
It was not a dinner outing. There were small entree-like snacks, but it's not the same. So Paul and I found a late-night place near Union Square.<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-88554014897601905452015-06-11T10:56:00.000-05:002015-06-11T10:56:05.269-05:00WWDC Day 2 - more sessions and a partyLots of sessions today. Let's tear right in:<br />
<br />
<ul>
<li>App Thinning in Xcode - Basically, the App Store will take your app apart and only deliver assets that your device needs. Storage savings good. You can also have on-demand resources. As long as your connected... They also talked about if you have your own distribution of apps (enterprise). If you set things up right using Assets catalogs, this is done for you. Cool.</li>
<li>UI Testing in Xcode - OK, this stuff rocks. You can record your UI. You can introspect your UI. As long as it is accessible. Which is not that hard to make happen for most apps. (Firefox may be an exception....) I am really excited about this.</li>
<li>Getting the Most out of App Analytics - Ugh. It's a website. They showed us features. Good data certainly, but a horrible topic for a talk. I walked out early.</li>
<li>Protocal-Oriented Programming - Awesome talk. Basically, Swift has a much richer type safety mechanism using protocols than traditional OOP. Really enjoyed this talk, and will almost certainly watch it multiple times to understand everything that went on.</li>
<li>CloudKit JS and WebServices - So, I wish I had attended or watched the CloudKit talk in 2014. Must do that. It looks awesome. This talk was about the JS libraries for it.</li>
</ul>
After the main conference, I went to see James Dempsey and the Breakpoints. Uneven songs musically, but the words are all about programming in Cocoa, and it's pretty funny. Check it out on iTunes if you are into that sort of thing.<br />
<br />
And I closed the night having an excellent cocktail with my best friend, Paul Tien-Shih Lee, whose birthday it was. The View bar in the Marriot is wonderful.<br />
sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-9497050435388778072015-06-10T11:21:00.001-05:002015-06-10T11:21:25.763-05:00WWDC Day 1 - Sessions, Sessions, and some old friendsTuesday was filled with sessions, with breaks in the Developer Tools lab. Sessions I attended:<br />
<br />
<ul>
<li>iOS Accessibility - Actually my favorite talk of the day. First, the presenter talked about the tenets of accessbility, and demo'd taking an app and adding voiceover capabilities. It's not that hard to do.</li>
<li>What's New in Swift - First of all, this sessions was very very crowded. Swift has really caught on in the Apple community. Important features in 2.0:</li>
<ul>
<li>Error handling - similar but not identical to exception handling. Really needed in the language, as I have run into cases where iOS was throwing an exception, but there was no way for me to catch it and figure out what was going on. Huge addition to the language.</li>
<li>Protocol extensions - These are much easier now, as you can include, for instance, all collection classes, or things like that. This can be quite powerful, and a lot of new functionality and APIs written by Apple are implemented this way.</li>
</ul>
<li>What's New in Cocoa - OS X APIs are being made more Swiftable, so Objective C is being enhanced to interoperate better.</li>
<li>What's New in Cocoa Touch - Frustrating session that talked about a bunch of technogies in outline format directing us to the session that matches. No real content here.</li>
<li>Improving Your Existing Apps with Swift - The presenter showed us how to take an existing app and add code in Swift to it, even if it is in Objective C.</li>
</ul>
I also spent some time in the Developer Tools Lab catching up with former coworkers. Plus, I discovered an Xcode 7 bug launching the simulator, and I talked to them about that.<br />
<br />
After the show, I met some friends from college and/or my very first projects for dinner in San Mateo. I was truly great to see them.<br />
<br />
<br />
<ul><ul>
</ul>
</ul>
sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-45377178645120456362015-06-09T11:14:00.002-05:002015-06-09T11:14:22.447-05:00WWDC Day 0, Part 2 - Platforms State of the Union<div id="yui_3_17_2_1_1433865704234_7853">
The Platforms State of the Union session was much more interesting than the keynote. Highlights applicable to what I work on:</div>
<ul dir="ltr">
<li>CloudKit
- looks like Apple is setting up a JSON server for Mac and iOS apps to
use as a backend. Have to have an AppleID, so I don't know how useful it
really is for customers not in the Apple ecosystem, but I intend to
find out.</li>
<li>StackView - Finally. A useable layout manager.
With several different sizes of iOS devices out there, having a much
more flexible adaptive layout manager has been missing for too long.
Tcl/Tk and Java AWT/Swing have had this for years; good to see something
useful here.</li>
<li>Storyboard linking - Hooray! Before Xcode 7,
all of your storyboard UI was in one big file. This made it really hard
to manage, particularly when you have multiple panels with multiple
engineers working on them. Xcode's Interface Builder really likes to
have a big screen, and the very large storyboard made it worse. Better
zooming in IB would help, but breaking this out really needed to happen.</li>
<li>Xcode
now has memory checking features. Looks like a combination of static
and runtime analysis. This looks as useful or more than tools like
Coverity and Purify.</li>
<li>There is UI testing now. This is really
big. One of the big problems with both iOS and Mac OS is that there has
been no way to record and test actions with UI elements. Web developers
for years have had Selenium for this, and there really has been no
comparable native solution for most other platforms. There are some
things you have to make your app do to take advantage of this:<br /><ul dir="ltr">
<li>You have to make your app accessible.</li>
<li>You have to make your app localizable.</li>
<li>You have to make your app use the Size classes (which make the UI adaptable; see StackKit above)</li>
</ul>
</li>
</ul>
You should do those things anyway.<br />
Great session.<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-49543902294584757262015-06-08T15:45:00.000-05:002015-06-08T15:45:18.786-05:00WWDC Day 0, Part 1 - Keynote<div class="sqs-block html-block sqs-block-html" data-block-type="2" id="block-4ea41611747e31fafdd3">
<div class="sqs-block-content" id="yui_3_17_2_4_1433794618441_5817">
<div id="yui_3_17_2_4_1433794618441_6377">
First
of all, there are a lot of people here. Last night, my buddy told me
that I might want to line up early; otherwise, I might have ended up in
the overflow room.</div>
<div id="yui_3_17_2_4_1433794618441_6377">
<br /></div>
<div id="yui_3_17_2_4_1433794618441_6399">
And my
Mozilla colleagues, Emily Toop and Darrin Henin, wanted to hook up
early. So I set out to Moscone West and arrived at 6:30. I initially
went to the back of the line. It went north on 4th, all of the way west
on Minna, back South on 5th, and then almost completing the circle
halfway back up Howard. </div>
<div id="yui_3_17_2_4_1433794618441_6399">
<br /></div>
<div id="yui_3_17_2_4_1433794618441_6399">
Fortunately, the other Mozillians found some of
their friends who work at Facebook, and got us a place at the front of
the line. Hooray.</div>
<div id="yui_3_17_2_4_1433794618441_6399">
<br /></div>
<div id="yui_3_17_2_4_1433794618441_6401">
They let us
into the building at 8. We went up the escalators, and then walked all
of the way around the second floor, where we waited in the (hot,
crowded) hallway for another hour.</div>
<div id="yui_3_17_2_4_1433794618441_6401">
<br /></div>
<div id="yui_3_17_2_4_1433794618441_6406">
At
nine, they let us crowd around the base of the escalator to the 3rd
floor. We were there for about half an hour when we were finally let
into the main hall.</div>
<div id="yui_3_17_2_4_1433794618441_6406">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguBgt57a42P_zSobHSZxC3eHiVsuIqij1lNMSwL2YCiFjil-VTjdl2kn2WlXeZO1Gl-cnfavth8FGc6FsmcuS9ouEPBvNe2dmtInaUV1a5y4pKwf1pdpaQmjTbBWTAjud6NKCFRj-Eroc/s1600/WWDC+Opening.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguBgt57a42P_zSobHSZxC3eHiVsuIqij1lNMSwL2YCiFjil-VTjdl2kn2WlXeZO1Gl-cnfavth8FGc6FsmcuS9ouEPBvNe2dmtInaUV1a5y4pKwf1pdpaQmjTbBWTAjud6NKCFRj-Eroc/s320/WWDC+Opening.png" width="320" /></a></div>
<div id="yui_3_17_2_4_1433794618441_6423">
The keynote itself was a little
disappointing. New versions of OS X and iOS with some whizzy features.
My favorite was the multiapp features in iPad; looking forward to
playing with those. My single favorite announcement was that Swift is
now going to be Open Source and run on Linux. They then talked about
watchOS, which I currently have no interest in.</div>
<div id="yui_3_17_2_4_1433794618441_6423">
<br /></div>
<div id="yui_3_17_2_4_1433794618441_6409">
And
then they wasted 45 minutes with the Apple Music announcement. OK, I
can stream all of Apple's catalog. But I have to either stream or play
my library? Wasn't clear. And the performance did nothing for me.</div>
<div id="yui_3_17_2_4_1433794618441_6409">
<br /></div>
<div id="yui_3_17_2_4_1433794618441_6412">
So. OS X El Capitain and iOS 9: Yay. Looks good. Carry on. </div>
<div id="yui_3_17_2_4_1433794618441_6412">
watchOS: Cool, I guess. </div>
<div id="yui_3_17_2_4_1433794618441_6412">
MUSIC: meh.</div>
<div id="yui_3_17_2_4_1433794618441_6406">
<br /></div>
</div>
</div>
sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-58737344273687705112015-06-07T20:44:00.000-05:002015-06-07T20:44:11.783-05:00WWDC - D -1When WWDC signups went up, I decided to take a chance and see if I could score a ticket. Much to my surprise, I did get one. So, here I am, in San Francisco, the night before it starts, and I am about to go for the first time since 2005.<br />
<br />
In that WWDC, I was an Apple employee. I worked on the Developer Tools team. We were shuffled into the Apple Employee room for the Keynote. At the end of the keynote, Steve Jobs announced that Apple was moving the Mac product line to Intel. I was on the team that was "in the know" about the transition. SJ asked us all to stand up, and the rest of the employees gave us a standing O. Was one of the proudest moments of my career.<br />
<br />
Since then, I have moved to Austin and have worked several jobs. Currently, I work in automation for Mozilla. I hope to do some development work someday, and Mozilla has an effort underway for iOS, so I am going to be attending sessions and talking with people here about that effort. I am also going to sessions for my personal projects.<br />
<br />
I checked in today, and they did something really smart. They gave us a windbreaker. Anybody who has been to San Francisco in June knows that this is really smart. There are probably many attendees who have never been here and don't know that June and July are cold, foggy and windy here.<br />
<br />
This is not the first year they have done this (I saw somebody with a "14" on his back), but it is really brilliant.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmhntbic2NFdoWITchkw4QINWFHT0W_DJTZzGo5SG5_WC2bKU7kR5JGWsWqSKjN8lmL_X4q0nXSgOAPNQpSsrDJGPwi6HDMglHqzqu0aWKpECmqpDDaDkp8rW7mpEVcSWdVXHElSGMECo/s1600/WWDC+Jacket+Selfie+-+Front.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmhntbic2NFdoWITchkw4QINWFHT0W_DJTZzGo5SG5_WC2bKU7kR5JGWsWqSKjN8lmL_X4q0nXSgOAPNQpSsrDJGPwi6HDMglHqzqu0aWKpECmqpDDaDkp8rW7mpEVcSWdVXHElSGMECo/s320/WWDC+Jacket+Selfie+-+Front.png" width="240" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMGw_Itx6YZsc29XyZSrIi7MxTwIsxhiYu1tJ5U1KDTsjh3c3ObYh7OeXLsYmpowroHbLtrPxAcFIz9CHKy17DTVYfyP0SdccuKuM0K0Ptafn5x7lZJM7T-ve0_aPDvNf7xDXdhEwuqDY/s1600/WWDC+Jacket+Selfie+-+Rear.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMGw_Itx6YZsc29XyZSrIi7MxTwIsxhiYu1tJ5U1KDTsjh3c3ObYh7OeXLsYmpowroHbLtrPxAcFIz9CHKy17DTVYfyP0SdccuKuM0K0Ptafn5x7lZJM7T-ve0_aPDvNf7xDXdhEwuqDY/s320/WWDC+Jacket+Selfie+-+Rear.png" width="240" /></a></div>
Tomorrow is dominated by the Keynote, and in the afternoon, the only things to see are Platforms State of the Union and the Apple Design awards.<br />
<br />
I'm stoked!<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-8567301586680881362015-04-07T17:14:00.003-05:002015-04-24T13:27:19.767-05:00How to build Platform QA JenkinsSo, I never have done a step-by-step to build the Jenkins instance that I have built. Knowing how to do it yourself might be important if you want to test jobs running in Jenkins.<br />
<br />
First of all, decide on the host OS for Jenkins. I chose Ubuntu 14 for several reasons:<br />
<br />
<br />
<ul>
<li>It's free.</li>
<li>It's easy to install on a virtual machine.</li>
<li>There are now incredibly easy-to-install debian packages that do all of the work of installing Java, installing Jenkins, setting up a Jenkins user, and starting Jenkins automatically on Linux. Updating Jenkins then becomes a matter of running updates like you would for other software.</li>
</ul>
<h2>
Setting up the master VM</h2>
<div>
<ul>
<li>Install Ubuntu on a VM host, like VirtualBox or VMWare.</li>
<ul>
<li>Give the VM at least 2 cores, 80 GB of disk space, and 4 GB of memory.</li>
</ul>
<li>Follow the instructions here:</li>
<ul>
<li>https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu</li>
</ul>
<li>Install the following Plugins. First follow the following steps:</li>
<ul>
<li>Navigate to your jenkins instance.</li>
<li>Click on "Manage Jenkins"</li>
<li>Click on "Manage Plugins". (This is the url http://localhost:8080/pluginManager on your VM)</li>
<li>Click on "Available". Install the following:</li>
<ul>
<li>File System SCM</li>
<li>Filesystem Trigger Plug-in</li>
<li>GIT client plugin</li>
<li>GIT Parameter Plug-in</li>
<li>GIT plutin</li>
<li>GitHub API Plugin</li>
<li>Mercurial plugin</li>
<li>Multiple SCMs plugin</li>
<li>SSH Agent Plugin</li>
<li>SSH Credentials Plugin</li>
<li>SSH plugin</li>
<li>SSH Slaves plugin</li>
<li>URLTrigger Plug-in</li>
<li>Windows Slaves Plugin</li>
<li>Workspace Cleanup Plugin</li>
</ul>
<li>Restart Jenkins.</li>
</ul>
</ul>
<div>
Next Installment: <b>Add a builder</b></div>
</div>
<div>
<br /></div>
sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-50743061173895894472014-08-14T15:34:00.001-05:002015-04-24T13:27:32.647-05:00Working JenkinsWell, that was a lot of trial and error.<br />
<br />
So, here is how the Jenkins setup is working. I wrote a script (available at <a href="https://github.com/sydvicious/mozplatformqa-jenkins.git">at this repo in my github account</a>) called <b>maintain_firefox_cache.sh</b>. (It calls other scripts in the checkout directory). What it does:<br />
<br />
- Calls <a href="https://github.com/mozilla/mozdownload" target="_blank">mozdownload</a>. It will download the latest nightly build, but the name does not stay the same from day-to-day.<br />
- If this is the first time it is downloaded, it will copy the download payload to "firefox-latest-lighty.en-US.<platform>.<ext>", where <platform> and <ext> are appropriate to the platform we are caching.<br />
- If there is one there, it uses the unix <b>find</b> command to find the name of the latest binary, and copies that one. It also finds binaries older than the cached version and removes them.<br />
- On the Mac, this runs in a Mac builder, and this script will open the .dmg, copy the contents out, and repackage them into a .tar.bz2 file, since the steeplechase machine will be on Linux and doesn't easily know how to open a .dmg file.<br />
<br />
This leaves an artifact on the Jenkin's master filesystem. This is important later on.<br />
<br />
We also have to have the <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/firefox-34.0a1.en-US.linux-x86_64.tests.zip">payload</a> (this is the Firefox 34 version) with the tests directory. We are using the linux64 version, because our tests do not required any platform-specific compiled assets from the package. Unfortunately, mozdownload does not know about the tests payload, and this url will have to updated everytime there is a version bump. Maybe I'll add that to mozdownload some day.<br />
<br />
So that's great. We have firefox binaries, and test assets. Both of these need to be on the local filesystem of the steeplechase machine. So, how do we get them there?<br />
<br />
My previous post talked about a couple of plugins designed to help track assets and when they changed:<br />
<br />
<ul>
<li>URLSCM is really good at copying assets based on URLs. It's polling mechanism is broken, however; it always wants to download the asset even when it has not changed.</li>
<li>URLTrigger allows you to track modification date changes, but does not actually copy them.</li>
</ul>
<div>
For the tests download, I use the URL Trigger to detect changes and URLSCM to download it.</div>
<div>
<br /></div>
<div>
For the Firefox binaries, I was trying to use URL Trigger to track changes in the URL of the Last Successful builds, but they were never triggering. Instead, I use the FSTrigger to detect when files change on the Jenkins master itself.</div>
<div>
<br /></div>
<div>
So there is the sequence (using linux64 as an example):</div>
<div>
<br /></div>
<div>
<ol>
<li>Once every 24 hours, firefox-nightly-linux24 fires. It run maintain_firefox_cache.sh, which runs mozdownload to get the linux64 binary. If there is a new binary, the new firefox-latest-nightly.en-US.tar.bz2 file is archived.</li>
<li>trigger-firefox-nightly-linux64 (running on the Jenkins master) notices the new file, and immediately triggers expand-firefox-nightly-linux64.</li>
<li>On the steeplechase machine, expand-firefox-nightly-linux64:</li>
<ol>
<li>Copies the firefox-latest-nightly-en-US.tar.bz2 file from the Jenkins master to the local filesystem.</li>
<li>Expands the payload to the /home/mozilla/firefoxes/nightly/linux64 directory.</li>
<li>Triggers all of the steeplechase jobs based on linux64 to be run.</li>
</ol>
<li>A steeplechase job will run, passing the correct binaries and test files to the test machines.</li>
</ol>
<div>
I also have add the SCM Sync plugin to the Jenkins instance so hopefully I won't have to create all of these jobs on the ESX machine from scratch (although I will have to edit them).</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-25538016657666085712014-08-11T17:47:00.000-05:002015-04-24T14:25:16.445-05:00Back to Jenkins funSo, now, I know how to download binaries and get the correct versions independent of what their names actually are.<br />
<br />
Now, I need my jobs to trigger each other. The scheme I have is:<br />
<br />
<br />
<ol>
<li>Run download. If the binary is newer, overwrite the canonically named version, i.e., firefox-latest-nightly.en-US.linux-x86_64.tar.bz2.</li>
<li>Another job triggers when firefox-latest-nightly.en-US.linux-x86_64.tar.bz2. It runs on the Steeplechase machine, and it expands the archive into a known directory location.</li>
<li>It then triggers jobs for all of the steeplechase runs that depend on it.</li>
</ol>
At Coverity I used the <a href="https://wiki.jenkins-ci.org/display/JENKINS/URL+SCM" target="_blank">URLSCM plugin</a> to do the triggering. Basically it used the SCM polling mechanism builtin to Jenkins to see if the local copy of a file is newer than the version at a URL. The problem is, this mechanism broke a few years ago, and to this day nobody has fixed the bug.<br />
<br />
Today I found out about another Jenkins plugin, <a href="https://wiki.jenkins-ci.org/display/JENKINS/URLTrigger+Plugin" target="_blank">URLTrigger Plugin</a>. This allows you to trigger builds of a variety of things, but most germain to me is that it can trigger if md5 checksums are different. I am trying this out overnight; we'll see what happens.<br />
<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-76944964852215605762014-08-07T17:15:00.000-05:002015-04-24T14:25:28.168-05:00Which Firefox build to download?So, eventually this system is going to have to download all Firefox releases and test them. All of the releases are available here:<br />
<br />
<a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/" target="_blank">http://ftp.mozilla.org/pub/mozilla.org/firefox/</a><br />
<br />
So, there are a LOT of releases on this server. So which ones to we want? Mozilla has five (or more) active release trains at any one point:<br />
<br />
<br />
<ul>
<li><b>Nightly</b> - This is a nightly build of the code checked into mozilla-central, the Mercurial repository that holds Firefox. It is the least stable of them all.</li>
<li><b>Aurora</b> - This is for code that is Feature Complete™, or some other terminology, which means that the feature has landed but has had very little testing.</li>
<li><b>Beta</b> - We want to release this build next time we release something, so we are going through final testing.</li>
<li><b>Latest</b> - This is the latest release. Right now, this is Firefox 31, but that will change next release cycle.</li>
<li><b>ESR</b> (Extended Support Release) - This release is primarily intended for large organizations who want fewer releases for stability. Right now, there are two of these, FF 24, and FF 30. More info on this topic is <a href="https://www.mozilla.org/en-US/firefox/organizations/" target="_blank">here</a>.</li>
</ul>
<div>
There is a utility called mozdownload which is <a href="https://github.com/mozilla/mozdownload.git" target="_blank">here</a>. Once you build and install it, mozdownload is a big help. It deals with changing file names and dates and the like.</div>
<div>
<br /></div>
<div>
So where is all of this stuff on ftp.mozilla.org? And what is the mozdownload command-line for it?</div>
<div>
<br /></div>
<div>
<ul>
<li>Nightly - <a href="https://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central/" target="_blank">https://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central/</a> - mozdownload --type=daily</li>
<li>Aurora - <a href="https://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-aurora/" target="_blank">https://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-aurora/</a> - mozdownload --type=daily --branch=mozilla-aurora</li>
<li>Beta - <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest-beta" target="_blank">http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest-beta</a> - mozdownload --version=latest-beta</li>
<li>Release ("latest") - <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest/" target="_blank">http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest/</a> - mozdownload --version=latest</li>
<li>ESR - <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest-esr/" target="_blank">http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest-esr/</a> - mozdownload --version=latest-esr</li>
</ul>
<div>
I hope that this helps. It sure helps me.</div>
</div>
<div>
<br /></div>
sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-63120541888702285572014-07-31T14:34:00.002-05:002015-04-24T14:25:40.328-05:00Finally.<br />
<br />
I have a Jenkins instance running the regression suite on Firefox nightly builds in all platform combinations of linux64, linux32, and macosx. The front page looks like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO0ibyEWeJKYkNxoKb5IjJBI4A8gxng_vGr8rwKx_prSZeWCKDK96BxVqY5uVhgOtp0uXnxT8P_HCxVN7NuEYNBXCncZpWll_iLLe49gAOPZUvA1c8J6g3LsGpN2sRnjO2zK-Z1UAbzb0/s1600/Screen+Shot+2014-07-31+at+12.26.18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO0ibyEWeJKYkNxoKb5IjJBI4A8gxng_vGr8rwKx_prSZeWCKDK96BxVqY5uVhgOtp0uXnxT8P_HCxVN7NuEYNBXCncZpWll_iLLe49gAOPZUvA1c8J6g3LsGpN2sRnjO2zK-Z1UAbzb0/s1600/Screen+Shot+2014-07-31+at+12.26.18.png" height="237" width="320" /></a></div>
<br />
So, I have proof-of-concept. I am demoing this at our QA Work Week QA Fair later today. Should be fun!<br />
<br />
Lots of work to do, however.<br />
<br />
<br />
<ol>
<li>I need to investigate using parameterized builds. Having to create <b>and maintain</b> a separate Jenkins job for each combination is painful (I have a lot of experience with this from Coverity, alas).</li>
<li>Henrick Skupin has a Jenkins instance, and he has solved the problem of the nightly version numbers changing every month. Need to implement that.</li>
<li>Need to add jobs for nightly versions connecting to Aurora, Beta, Release and ERS versions of Firefox.</li>
<li>The test is not incredibly valid. I need to take the test additions done by Geo Mealer in our Sunny Day Environment and run the connections for 1 minute each. I really want to do the parameterization first so I don't have to update dozens of jobs.</li>
<li>I need to put this in our ESX farm. However, I only want to do this when most of the above is done. I am going to set up Jenkins on the ESX farm, running linux64 regressions for now.</li>
<li>I have got to get Jenkins and Steeplechase working for Windows. While I am in Mountain View this week, I do not have access to my Windows VMs. Will have to wait until I get home next week.</li>
<li>Sunny Day Environment does most of its job maintenance and triggering via cron jobs. It would be nice to move this into Jenkins.</li>
<li>Need to report results of test runs into Treeherder. This is a pretty big effort.</li>
<li>And then, there is B2G and Android.</li>
<li>Steeplechase changes</li>
<ol>
<li>Run with existing binaries but new profile. (or whatever; independent control)</li>
<li>Send binary archives down instead of directories, and tell clients how to unpack them.</li>
<li>Steeplechase should talk to treeherder.</li>
</ol>
</ol>
<div>
Ought to keep me busy.</div>
<div>
<br /></div>
sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com1tag:blogger.com,1999:blog-2432662687309411741.post-37549057113620737512014-07-30T16:24:00.000-05:002015-04-24T14:25:53.338-05:00Another fun fact: For Negatus to be able to run firefox for the tests, it has to run it in a display. Without setting up a fake X session, the Negatus client has to be logged in, at least on Linux. I am sure that this will be true on other platforms as well. For Linux, we could run in a virtual frame buffer, but I am not sure that this is necessary. Just set up the account the test will run in to auto login. Make sure it is on a private network, though...<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-60170327633845462822014-07-30T16:06:00.001-05:002015-04-24T14:26:09.651-05:00OK, it's just too hard to nail down all of the libraries to run firefox32 on linux64. I give up. Average users won't do this.<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-58714820192777092142014-07-30T15:55:00.000-05:002015-04-24T14:26:28.638-05:00A-ha!You actually have to do work to run 32-bit binaries on 64-bit linux. I knew this, but I rediscovered this fact this morning.<br />
<br />
Of course, this got much harder in modern Ubuntu:<br />
<br />
<pre>sudo apt-get install libxtst6:i386 libXext6:i386 libxi6:i386 libncurses5:i386 libxt6:i386 libxpm4:i386 libxmu6:i386 libxp6:i386
sudo apt-get install libstdc++6-4.8-dbg:i386
</pre>
<br />
Sigh.<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-17455374525304370872014-07-23T16:58:00.002-05:002015-04-24T14:26:40.402-05:00Three things I am working on - follow-upThing 1 - <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1036992" target="_blank">Bugzilla 1036992</a> - I have a patch now which completes the split up of test_seek.html, including refactoring of common javascript in test_seek-split*.html files. Figuring out how to add the javascript so that it was actually available was fun. Basically, everything goes in mochitest.ini. Who new?<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1036992"></a><br />
<br />
Thing 2 - mochitest dying on my VM. Well, it still happens, and it often does not leave a stack dump. Still working on this one.<br />
<br />
Thing 3 - Jenkins and nodejs. I restarted everything and it started working. Huh. Weird.<br />
<br />
So, now I am setting up Jenkins in Mountain View to reproduce the result. Unfortunately, when the physical box was moved into the lab, the networking broke. All of the existing VMs have IPv6 addresses rather than the static addresses I thought were assigned.<br />
<br />
Coworker in charge of box said he would look at that.<br />
<br />
So, now I am building linux32 builders for this test on my home VM. I am working out of one of my relative's houses in the Midwest right now, and her internet connection was SLOW. Well, the upgrade came through yesterday, and now it is as fast as my home network in Texas.<br />
<br />
It helps.<br />
<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-83428302452295417372014-07-22T11:40:00.000-05:002015-04-24T14:26:55.509-05:00Three things I am working onThe first one is this <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1036992" target="_blank">bugzilla</a>. Basically, the audio/video tests sometimes time out in Mozilla's build/test environment, and we are trying to track down which tests are sensitive. We run a lot of tests in Amazon's S3 cloud, and disk and network access are not predictable in that environment.<br />
<br />
My boss and I have submitted a few patches to unparallelize some of the tests to see if it helps. Latest patch is run by our environment <a href="https://tbpl.mozilla.org/?tree=Try&rev=fc69e234fb84" target="_blank">in tbpl, here</a>. I need to run quite a few more tests and analyze them today. One thing I had to learn was Mercurial queues; using this is the best way to work with patches with Firefox and Bugzilla. More info <a href="https://developer.mozilla.org/en-US/docs/Mercurial_Queues" target="_blank">here</a> and <a href="http://hgbook.red-bean.com/read/managing-change-with-mercurial-queues.html" target="_blank">here</a>. You have to be really careful with them, as it is easy to blow away work. Still, it's a really nice system for managing patches. In git, you would do the same with local branches, but it's not quite as easy.<br />
<br />
The second is a test time out running mochitest on a subdirectory on a Mac OS X VM. Mochitest is the oldest Firefox test suite. More info on it can be found <a href="https://developer.mozilla.org/en-US/docs/Mochitest" target="_blank">here</a>. I chose to run it from a build tree, so I had to go build Firefox on Mac. Info on that <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions" target="_blank">here</a>. I then ran the following:<br />
<br />
<br />
<pre>./mach mochitest-plain content/media/test
</pre>
<br />
<br />
And then watched the magic! Note that this is the same test suite as we are watching with the first problem I am working on. Sometimes, I get a test failure on my VM that nobody else seems to be running into, so I am working on trying to get enough data to file a bug. A coworker directed me to try out setting MINIDUMP_STACKWALK before running the test. Once I dug enough for somebody to tell me that this tools was part of a another mercurial repo (http://hg.mozilla.org/build/tools), I tried it. No dice. Need to submit that bug report today.<br />
<br />
And last, I am having trouble getting steeplechase to run in my Jenkins lab. The latest:<br />
<br />
<br />
<pre>cmd: ['/tmp/tests/steeplechase/app/firefox', '-no-remote', '-profile', '/tmp/tests/steeplechase/profile', 'http://172.16.141.51:55293/index.html']
Traceback (most recent call last):
File "/home/mozilla/jenkins/workspace/linux64-linux64/steeplechase/steeplechase/runsteeplechase.py", line 311, in <module>
sys.exit(0 if main(sys.argv[1:]) else 1)
File "/home/mozilla/jenkins/workspace/linux64-linux64/steeplechase/steeplechase/runsteeplechase.py", line 301, in main
html_pass_count, html_fail_count = test.run()
File "/home/mozilla/jenkins/workspace/linux64-linux64/steeplechase/steeplechase/runsteeplechase.py", line 187, in run
passes, failures = result
TypeError: 'NoneType' object is not iterable
Exception in thread Client 1:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/home/mozilla/jenkins/workspace/linux64-linux64/steeplechase/steeplechase/runsteeplechase.py", line 100, in run
output = dm.shellCheckOutput(cmd, env=env)
File "/usr/local/lib/python2.7/dist-packages/mozdevice-0.37-py2.7.egg/mozdevice/devicemanager.py", line 395, in shellCheckOutput
raise DMError("Non-zero return code for command: %s (output: '%s', retval: '%s')" % (cmd, output, retval))
DMError: Non-zero return code for command: ['/tmp/tests/steeplechase/app/firefox', '-no-remote', '-profile', '/tmp/tests/steeplechase/profile', 'http://172.16.141.51:55293/index.html'] (output: 'r', retval: '256')
Exception in thread Client 2:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/home/mozilla/jenkins/workspace/linux64-linux64/steeplechase/steeplechase/runsteeplechase.py", line 100, in run
output = dm.shellCheckOutput(cmd, env=env)
File "/usr/local/lib/python2.7/dist-packages/mozdevice-0.37-py2.7.egg/mozdevice/devicemanager.py", line 395, in shellCheckOutput
raise DMError("Non-zero return code for command: %s (output: '%s', retval: '%s')" % (cmd, output, retval))
DMError: Non-zero return code for command: ['/tmp/tests/steeplechase/app/firefox', '-no-remote', '-profile', '/tmp/tests/steeplechase/profile', 'http://172.16.141.51:55293/index.html'] (output: 'r', retval: '256')
</module></pre>
<br />
<br />
Need to see what that is about...
sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-75784121540806255412014-07-22T10:49:00.000-05:002015-04-24T14:27:07.514-05:00[LAB] Setting up for jenkinsPackages required on Jenkins machine:<br />
<br />
<ul>
<li>git</li>
</ul>
<div>
Packages required on Steeplechase machine:</div>
<div>
<ul>
<li>openjdk-7-jre-headless</li>
<li>curl</li>
</ul>
<div>
Jenkins plugins:</div>
</div>
<div>
<ul>
<li>Git plugin</li>
<li>Mercurial plugin</li>
</ul>
<div>
I am afraid I finished the buildout of this without good notes. Sorry!</div>
</div>
sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-68748266616414426912014-07-15T14:52:00.000-05:002015-04-24T14:27:19.822-05:00New taskI was given a new area to investigate on top of building out a lab. Basically, we have some media streaming tests in our tree, in <mozilla-central>/content/media/test, and they are flaky. I have been asked to investigate a couple of things, using test_seek.html as an example:<br />
<br />
- The tests actually get run in parallel. I have been asked to see if running them singly will affect the intermediate failure rate.<br />
- I have been asked to split this file up. It currently calls 13 sub-files. I have already generated the first of those 13 files and it works fine.<br />
<br />
All of this requires checking out the Firefox source (instructions <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions" target="_blank">here</a>), and then running Mochitest (instructions <a href="https://developer.mozilla.org/en-US/docs/Mochitest" target="_blank">here</a>). I can run the individual test.<br />
<br />
If do add a test file in a directory, such as <mozilla-central>/content/media/test, you have to add it to the mochitest.ini file in that directory to be picked up by the system.<br />
<br />
I have two build trees (my Mercurial foo is low, and I am lazy), one to generate patches for the split out of the tests, and one to generate patches for our try system running only one test at a time.<br />
<br />
Alas, I am not at my house; I am with family in another state, and the internet is slow here. It will be upgraded soon, but this is taking a while...<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-89462993111983541532014-07-10T10:54:00.002-05:002015-04-24T14:27:35.667-05:00OK, time to step backOccasionally, you reach some little milestone, and it helps to make a To Do list. So, here is what is left to have this lab up and running now that I have 3 machines that can run tests.<br />
<br />
<br />
1. Get Negatus to run on boot for the two client machines.<br />
2. On my home lab, develop the Jenkins scripts and job templates that will do the work.<br />
3. Install the Jenkins instance in the ESX lab.<br />
4. Port the Jenkins work from the home lab to the ESX lab.<br />
5. Start adding platforms.<br />
<br />
That's a good general list.<br />
<br />
Tomorrow is a test day, so I probably won't be doing my with this stuff. Let's what I can get done today.<br />
<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-39028547291509596492014-07-09T16:54:00.001-05:002015-04-24T14:27:51.760-05:00Running the testsOne of my coworkers is going to post a public document on how to get steeplechase and Negatus running. Once he posts that, I will repost the link here. Basically, it looks like this:<br />
<br />
- One machine needs to run simplesignaling. This is a nodejs-based server to facilitate Firefox communication.<br />
- A machine needs to run steelpechase. This can be the same machine as the one that runs simplesignalling, but not required.<br />
- Each of the client machines runs Negatus, which is a test agent.<br />
<br />
The steeplechase machine needs to download the firefox binaries and tests from <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/" target="_blank">http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/</a>. The binaries and test files have to be de-archived. Steeplechase can then be run:<br />
<br />
<pre>% tar xvfj firefox-33.0a1.en-US.linux-x86_64.tar.bz2
% mkdir tests
% cd tests/
% unzip ../firefox-33.0a1.en-US.linux-x86_64.tests.zip
% mkdir ~/logs
% python ~/src/steeplechase/steeplechase/runsteeplechase.py --binary /home/mozilla/firefox-releases/firefox/firefox --specialpowers-path /home/mozilla/firefox-releases/tests/steeplechase/specialpowers --prefs-file /home/mozilla/firefox-releases/tests/steeplechase/prefs_general.js --signalling-server 'http://192.168.1.2:8080/' --html-manifest /home/mozilla/firefox-releases/tests/steeplechase/tests/steeplechase.ini --save-logs-to ~/logs/ --host1 192.168.1.3:20701 --host2 192.168.1.4:20701
steeplechase INFO | Pushing app to Client 1...
steeplechase INFO | Pushing app to Client 2...
Writing profile for Client 1...
Pushing profile to Client 1...
cmd: ['/tmp/tests/steeplechase/app/firefox', '-no-remote', '-profile', '/tmp/tests/steeplechase/profile', 'http://192.168.1.3:38439/index.html']
Writing profile for Client 2...
Pushing profile to Client 2...
cmd: ['/tmp/tests/steeplechase/app/firefox', '-no-remote', '-profile', '/tmp/tests/steeplechase/profile', 'http://192.168.1.4:38439/index.html']
steeplechase INFO | Waiting for results...
steeplechase INFO | All clients finished
steeplechase INFO | Result summary:
steeplechase INFO | Passed: 118
steeplechase INFO | Failed: 0
%
</pre>
<br />
<br />
I now have this working on both my lab at home and the ESX lab in Mountain View. Next: making it work autonomously.
<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-28947883869711529072014-07-09T14:00:00.000-05:002015-04-24T14:28:02.239-05:00Bootstrapping a data center remotelyUsing a VM running vSphere connecting to an ESX server 2000 miles away over VPN, and using VNC to connect to a known Linux box on the same network as the ESX box, I was able to download enough ISOs to create a Windows 7 VM. The idea is to put vSphere Client on it, and use Microsoft Remote Desktop to connect to it. I can then download ISOs to its hard drive and create VMs with "ISO on local disk" option.<br />
<br />
Had to download MS RDC. It's free now. This is great.<br />
<br />
I am also starting to build up the first linux box. I used VNC on the other machine to download the ISO of Ubuntu 14.10 Desktop. Used the VSphere Client to install the machine. Of course, I had to use the vSphere Client to access the Desktop. Doing this from RDC is painful; typing often results in duplicated characters. So I installed openssh-server:<br />
<br />
sudo apt-get install openssh-server<br />
sudo /etc/init.d/ssh restart<br />
<br />
And then I could ssh in from a Terminal on my machine. Ah, much better.<br />
<br />
I still want desktop access, though. I enabled Desktop Sharing on the Linux VM. Alas, the Mac Screen Sharing could not connect to it, although it could connect to an Ubuntu 12 machine. My coworker point me to <a href="http://askubuntu.com/questions/463486/can-no-longer-use-screen-share-to-connect-mac-to-ubuntu-since-upgrading-to-14-04" target="_blank">this article</a>, and now the Linux machine is good to go.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi144nTFRghuRRqGkLl3MHljmyePrp0SitlfIdZDrH4m6ixLObpewoUqQWaKJRUKdy2AAHrY1YdXkyokTAJxt46bdnoXDLVxxBByA3LNaJeNBqBOoUo7NblF8wNBqMFaPXxkyCjjqk_Bzo/s1600/Screen+Shot+2014-07-09+at+13.58.28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi144nTFRghuRRqGkLl3MHljmyePrp0SitlfIdZDrH4m6ixLObpewoUqQWaKJRUKdy2AAHrY1YdXkyokTAJxt46bdnoXDLVxxBByA3LNaJeNBqBOoUo7NblF8wNBqMFaPXxkyCjjqk_Bzo/s1600/Screen+Shot+2014-07-09+at+13.58.28.png" height="250" width="320" /></a></div>
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-1962179052918897502014-07-07T18:02:00.001-05:002015-04-24T14:28:12.514-05:00ESX, remotelyOK, somebody gave me VNC to a linux box in the office over VPN, so I can download ISOs. MSDN's sight has a really really bad captcha on it, and using a password manager was a pain, and it did 2-level, but I'm safe now, right?<br />
<br />
Anyway, I can now download ISOs onto a machine on the same network as ESX box. Need to figure out how to get ESX to mount the newly created NFS export where the ISO lives.<br />
<br />
OK, I figured it out. You create the VM in vSphereClient. Let the boot fail. Then, connect the .iso stored on your data store to the DVD drive. Finally, press Ctrl-Alt-Ins, and it should boot to your ISO.<br />
<br />
More later.sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-3746634050706840402014-07-03T16:49:00.002-05:002015-04-24T14:28:26.661-05:00Home labNow, it's time to try everything out. The steeplechase machine needs to have firefox binaries and test artifacts. So, let's go get them.<br />
<br />
The nightly build artifacts are <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/" target="_blank">here</a>. On the steeplechase machine, we need to download both firefox-33.0a1.en-US.linux-x86_64.tar.bz2 and firefox-33.0a1.en-US.linux-x86_64.tests.zip. We will then unpack them appropriately:<br />
<br />
<br />
<pre>mkdir firefox-releases
cd firefox-releases
mv ~/Downloads/firefox* .
tar xvfz firefox*.tab.bz2
mkdir tests
cd tests
unzip ../firefox*.zip
</pre>
<br />
We have to have node running on this machine:<br />
<br />
<br />
<pre>mozilla@jenkins-steeplechase:~$ cd simplesignalling/
mozilla@jenkins-steeplechase:~/simplesignalling$ ls
package.json README.md server.js
mozilla@jenkins-steeplechase:~/simplesignalling$ nodejs server.js
</pre>
<br />
We need to start the agent on the two Negatus machines:<br />
<br />
<br />
<pre>mozilla@ubuntu:~/src$ cd Negatus/
mozilla@ubuntu:~/src/Negatus$ git pull
Already up-to-date.
mozilla@ubuntu:~/src/Negatus$ ./agent
Command handler listening on 0.0.0.0:20701
Heartbeat handler listening on 0.0.0.0:20700
Query url: IPADDR=0.0.0.0%3A20701&NAME=SUTAgent
No SUTAgent.ini data.
No reboot callback data.
</pre>
<br />
<br />
Mmm. It looks like I forgot a step. Running server.js should have output something. Looking back on our internal notes, I needed to run this:
<br />
<pre>npm install socket.io@0.9.6
</pre>
<br />
<br />
If you do that from the simplesignalling directory, it will fail kind of like:
<br />
<pre>npm ERR! Error: Invalid version: "0.1"
npm ERR! at Object.module.exports.fixVersionField (/usr/lib/nodejs/normalize-package-data/lib/fixer.js:178:13)
npm ERR! at /usr/lib/nodejs/normalize-package-data/lib/normalize.js:29:38
npm ERR! at Array.forEach (native)
npm ERR! at normalize (/usr/lib/nodejs/normalize-package-data/lib/normalize.js:28:15)
</pre>
<br />
<br />
Once you install this correctly, then server.js will output something correctly:
<br />
<pre>mozilla@jenkins-steeplechase:~/simplesignalling$ nodejs server.js
info - socket.io started
</pre>
<br />
<br />
Now, we are ready to try to run steeplechase.
<br />
<pre>mozilla@jenkins-steeplechase:~/steeplechase$ python `pwd`/steeplechase/runsteeplechase.py --binary /home/mozilla/firefox-releases/firefox/firefox --specialpowers-path /home/mozilla/firefox-releases/tests/steeplechase/specialpowers --prefs-file /home/mozilla/firefox-releases/tests/steeplechase/prefs_general.js --signalling-server 'http://172.16.141.51:8080/' --html-manifest /home/mozilla/firefox-releases/tests/steeplechase/tests/steeplechase.ini --host1 172.16.141.52:20701 --host2 172.16.141.53:20701
steeplechase INFO | Pushing app to Client 1...
steeplechase INFO | Pushing app to Client 2...
Writing profile for Client 1...
Pushing profile to Client 1...
cmd: ['/tmp/tests/steeplechase/app/firefox', '-no-remote', '-profile', '/tmp/tests/steeplechase/profile', 'http://172.16.141.51:59367/index.html']
Writing profile for Client 2...
Pushing profile to Client 2...
cmd: ['/tmp/tests/steeplechase/app/firefox', '-no-remote', '-profile', '/tmp/tests/steeplechase/profile', 'http://172.16.141.51:59367/index.html']
steeplechase INFO | Waiting for results...
steeplechase INFO | All clients finished
steeplechase INFO | Result summary:
steeplechase INFO | Passed: 112
steeplechase INFO | Failed: 0
mozilla@jenkins-steeplechase:~/steeplechase$
</pre>
<br />
<br />
It worked! We have a running lab on Linux now.<br />
<br />
Next step: Get Jenkins to invoke this.
sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0tag:blogger.com,1999:blog-2432662687309411741.post-65190910499125733612014-07-03T15:36:00.000-05:002015-04-24T14:28:36.938-05:00Virtual CenterThe ESX server I am installing onto does not have any OS IOS images to use to make VMs. So I need to have them locally. However, I'm in Austin, and the ESX server is in Mt. View. This is not going to work. Somebody at Moz HQ is going to get up a machine I can login via Remote Desktop Connection so I can continue.<br />
<br />
<br />sydvicioushttp://www.blogger.com/profile/16480886347054440872noreply@blogger.com0