 Hi, everyone, it's Jeff Chalon again. This is the last screencast on Test 161. And then this one, we're going to show you how to use Test 161 to actually submit your assignments, which I'm assuming is something that you know you want to do. OK, so let's get started. In the previous ones, we showed you how to run test using Test 161. In the last assignment, I showed you how to configure things to submit. So I'll just review a few of those things. You need to start by going over to our Test 161 at opscast.org server, logging in with your credentials. Now what you'll see here, our documentation is not completely up to date. For now, please continue to use the documentation here. At some point, that'll be fixed and this will go away, but this is the better documentation right now. It's more complete and has the screencasts embedded and things like that. So now, but you remember, I had to do a couple of things to get this started. One was I had to adjust my test161.conf file. In addition to the root dir and the test161 dir, I needed to configure a server, which is test161.opscast.org, a repository, which is a remote repository that I set up on the class GitLab server. Yours may be somewhere else. And then I had to tell Test 161 who I was submitting on behalf of. So that's me, John, about what I need you. And that's a token that I generated here. And just for safety's sake, I will change that token as soon as these screencasts are up. So please don't try to use it to submit as me. Okay, so now here's my public key. The last thing I had to do was configure my Git repository that holds my OS161 sources so that test161 backend could clone it. In order to do that, so here is my OS161 sources. I've just committed some changes to this. Over here in my settings page, and this is on GitLab, over to deploy keys, this is the deploy key I added. This matches this key right here. And that's important. That allows the test161 backend to clone my repository for testing. Okay, so that's all set up. Now I'm gonna walk you through the process of doing your first submission. So the first thing I wanna emphasize here is the test161 is not designed to do a lot of backend testing as part of an iteration loop for you to be in. So the test161 tool runs locally and it runs very efficiently locally on purpose. That's to allow you to iterate, make changes, get an estimate, pretty good estimate of how you're going to do on the assignment before you submit. So before you submit anything, please run test161 locally, look at the output and decide that this is what you want or this is something that you're happy with. If the deadline is approaching, I would also encourage you to submit early. Submit early and often. You can submit as many times as you want up to the deadline, but no times after the deadline will be counted. So if it's an hour before the deadline and you guys are struggling to finish up something, submit a working copy of the stuff that you have. Get those points locked in and then if you manage to get a few more points right before the deadline, you won't be too worried about not getting any points for the assignment. Okay, so let's try to submit things here. So again, the first thing I wanna do is actually run this. So this is essentially just the base sources that we gave you. I haven't really made any changes here and what you're gonna see here unsurprisingly is I don't get any points, okay? But let's try to submit that. Let's see what happens, okay? So now the first thing before you submit is to make sure that your working directory is clean. This is the message you wanna see. There's nothing, no changes in my working directory that haven't been committed and there's no commits in this repository that have not been pushed to my remote repository. You can see that this matches, you know, this repository here. This is my origin matches the repository but I've configured test 161 to use it, okay? So now let's submit. Now you have to submit from your source repository if you try to submit somewhere else. It'll complain. This means you need to be in your source directory so let's go over there and now let's submit assignment one. So what's happening here is that test 161 is checking out a copy of your repository into a temporary directory. It's gonna build things and then before it submits, it's gonna run the test locally. This is pretty important because we want you to get a sense of the score that you're gonna get on the backend server before you actually submit. So you can see what happens here. I check out the latest ref. I'll show you some things that can go wrong in a minute here. I made everything, everything worked okay and then I ran the tests and unfortunately, as I knew, I'm not gonna earn any points for this assignment. And so in this case, test 161 actually short circuits and does not allow you to submit. That's because there's no point in you putting load on our backend servers if you haven't completed any portions of the assignment. Okay? Happily, I happen to have a working copy of the synchronization program that's just lying around. So let me do this, push that in there. And I'm gonna show you a couple of things that can go wrong. So here's the case where I have some uncommitted changes in my working directory. Now it turns out I can bemake, bemake install these guys and I can go over to my root directory and I can run assignment one. And this, I think, some of these should work. Maybe not all of them. Oh, I haven't implemented the reader-writer tests. Oh well, okay. I think everything else should work. Looks like my CV tests are running. So I'm not gonna get full credit here. I haven't implemented the reader-writer tests. My reader-writer locks actually work. So they'll work when we submit it back in. But please don't do this, please write those tests. My synchronization.c just didn't have a copy of them. So again, we're waiting here for the tests to complete. Some of these tests kind of slow, but I think we're into the end. Okay, so I got 20 out of 50. Oh, I also didn't finish the synchronization problem. So what you can see is I have, I'm pretty sure I have working locks. Yep, lock test one, lock test two, and lock test three all pass. And I have working CVs. So CV tests one, two, three, four, five. So that's where my 20 points are coming from. I got zero out of 10 on reader-writer locks. They work actually, but they can't be tested here because I didn't have to write the tests. And I got zero out of 10 on both the way I made it in stoplight problem. Okay. So I hope you wouldn't be satisfied with a score like this, but let's see what happens when we actually submit. So the first thing to do that I want to point out is let's go into my source directory. And let's try to submit here. Let's try to submit this assignment. So I think I'm gonna get 20 out of 20. I submitted my source directory. Everything's being cloned and built. Then here's the thing. Unfortunately, I'm in for a pretty nasty surprise here because what I'm about to find out is that I didn't submit my changes. I didn't commit my changes. So the latest version of my repository is the old version that doesn't have these 20 points that I just added. And so I can't submit. So that's, again, if you look at the good status, I've got changes here, so I need to commit those. Let's say working locks and CVs, yay. You can always be happy in your commit messages. All right, so now I've committed them and get status again. And now let me try to submit here. And here I can show you something else that can potentially go wrong. All right, so test 161 is cloning my repository into a temporary directory. Uh-oh, okay. So this was another error that you might see and here's the problem. The current commit, if I look at the get log for my source directory, this guy, F566, blah, blah, is not in the remote. So the problem is this commits in my local directory but I haven't pushed it to my remote repository. And so test 161 isn't gonna be able to get it. And again, here's another problem. My working directory is claimed and my branch is ahead of Origin Masters. What I need to do is push my changes. Slow, here the internet wifi is, hotel wifi is not particularly good. I'm not sure exactly why this is taking so long. All right, sweet. So now here's the magic message. My branch is up to date with my origin and the working directory is clean. Now let's run, let's submit assignment one. Okay. So same thing is happening over and over again. We may try to make this a bit faster in the future and maybe cash a copy of your remote for us to use. Same thing, gonna run the test locally. And in this case, what's gonna happen, as you can see, it's actually starting to run some of the lock tests, lock test one is running. That's gonna complete successfully. Other lock tests are working. Now I'm under the CV tests before some of these weren't run because my locks didn't work and so everything else sure it's working after that. Okay. I'm gonna go over here and while that's running, I just wanna show you what happened to me before. So I submitted a few minutes ago and this is the output from the test 161 server. So there are some differences between our build environment and your build environment. In particular, we copy over what's called an overlay before we test things on the remote server. So I had something that was working locally. I submitted it, the test 161 system will let me submit it and what happened was it didn't build on the back end. So why didn't that happen? Well, if you look down here in the build app, what should we nicely show you on the webpage? There were the reader writer lock tests were trying to use my reader writer lock primitives but they're not defined anywhere. So this is just a note that you might wanna keep in mind which is that there are some changes between the local environment and the remote environment and this is unavoidable. We're not giving you our tests for reader writer locks and so we do need you to write those primitives so that the reader writer locks test can use them. If you don't, you'll see an error message like this. Okay, hopefully that's pretty helpful. You can see that essentially the output of every step here is displayed when things start to build. All right, so now I'm in good shape. You can see that the test 161 program has determined that I'm gonna earn some points. Here's my estimated scores, that's pretty important. And now this is critical. So here are the collaboration guidelines for the assignment. When you submit to the test 161 backend, you're giving us a copy of your repository and we will aggressively use that copy to detect any sort of cheating. So please, you need to certify this. You have to answer yes or no, I'm gonna hit yes. And now your submission has been created. So this is pretty cool. So now you can see what's going on here. So here's my old one that was aborted, but here's a new submission and this page will update live as things go along. So now you can see here what happens is these are expanding and contracting as things are running. You can start to see some points adding up here. I got some points for one of the reader writer lock test which is weird. Oh, my reader writer lock test worked, that's right. I just couldn't test them locally. So let's see here. So yeah, and as this goes along, you're seeing dependencies are being processed and tests are running. So far I've got a 25 out of 50. I'm expecting a 30 because my reader writer locks actually work, but some of the other tests are gonna fail, the way many tests is gonna fail. It looks like there's one test that's still running here, just CV test two. It's pretty slow. You remember that's the one that does all this waiting and things like that, so that one's still going. And in a second, I hope it's gonna finish up. Boom, okay, cool. So that's done, that's done. Everything's gonna collapse and I got 30 out of 50. There it is. So now this page is updated, you don't have to do anything, you just sit here looking at it. I've submitted two targets in total, two to the assignment one grading target. Best score in this assignment is 30 out of 50. This gives you some information about what was submitted. So if you click on either of these submissions, this tells me the commit ID, the repository came from my user ID, and this will show your partner if you submit on behalf of someone else. I don't know what this is, this is interesting. Ehon built this really cool UI for this. So if I drill down here, this shows me everything that was run as part of the test. So this is the build process. Read a writer lock test, CV tests. We'll work on putting these in a better order in the future, but for now they're just kind of in order in which they completed or in order in which they were started, I think. And you can see this highlights where I got points, where I lost points. So my whale mating test didn't work. You'll see that the boot worked fine, but SB1 just failed. Now one thing you may notice here is that the output is quite different than what you would see locally. And this is intentional. We suppress a lot of output when we do the remote trusted testing because we want it to run a bit faster. And we also don't want you to use this as diagnostic output. So if you looked at this output, here's just a bunch of periods. It doesn't have the nice print Fs that you see locally where a print switch car is going through the intersection. And again, that's intentional. We don't want to provide that for you because this is not designed to help you iterate. Same thing with SB1, it doesn't seem like SB1 generated any output. I think it hangs. Yeah, SB1 hangs on failure in this particular case. Okay, so this is just an example of how to use this tool. It's pretty awesome. Really happy with the tool. We think it's going to be really help you guys out this semester. And many thanks to Scott and Nihon for putting this together. We're going to keep working on the web UI if you have any suggestions about how to improve things. Or if you have complaints, you find bugs, please let us know. But this is something we'll be using throughout the semester, so please start getting used to it. And we hope that you earn 50 out of 50. Go full points. Good luck.