Roku Developer Program

Developers and content creators—a complete solution for growing an audience directly.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
Level 7

Jenkins/CI/Automation/unit testing

Hi, I want to setup CI so that when I merge my project it will automatically build, unit test and deploy.
I'm a bit confused as to how one might do this with say, jenkins, because of the way the testing framework uses telnet.

some of you people must've done this : what did you do to get the test results back from telnet?

i.e. https://github.com/rokudev/unit-testing-framework/blob/master/docs/unit-test-framework.md
George Cook
https://georgejecook.github.io/
https://linkedin.com/in/georgejecook/
Roku developers slack group (https://join.slack.com/t/rokudevelopers/shared_invite/zt-4vw7rg6v-NH46oY7hTktpRIBM_zGvwA) : georgejecook

Contact me on roku developer slack group, or via pm to discuss consultancy/work opportunities/rooibos unit testing framework
0 Kudos
2 Replies
Highlighted
Level 8

Re: Jenkins/CI/Automation/unit testing

"georgejecook" wrote:
Hi, I want to setup CI so that when I merge my project it will automatically build, unit test and deploy.
I'm a bit confused as to how one might do this with say, jenkins, because of the way the testing framework uses telnet.

some of you people must've done this : what did you do to get the test results back from telnet?

i.e. https://github.com/rokudev/unit-testing-framework/blob/master/docs/unit-test-framework.md

We built out automated functionality for this in our build tool Ukor.  It generates a test report for you which you can use to view results. It's worth noting that your build server would need to be connected to an actual Roku device to run tests.
0 Kudos
Highlighted
Level 7

Re: Jenkins/CI/Automation/unit testing

open socket and run unit test and trim the result that you need by node.js from jenkins and added time out  

var net = require('net');
var fs = require('fs');

var port = 8085
var host = process.argv[2]
var fileName = process.argv[3]
var isLogging = false

var socket = net.connect(port, host, function() {
    console.log('[[ socket start ]] at ', new Date());
    socket.setTimeout(1000*60*2)
})

socket.on("error", function(err) {
    console.log("Error");
    console.log(err);
})

socket.on("close", function(err) {
    if (isLogging) {
        console.log("Connection closed");
    } else {
        console.log("Connection retry");
        socket.connect(port, host)
    }
})

socket.on("data", function (data) {
    string = data.toString()
    if (!isLogging && string.includes("TEST START")){
        isLogging = true
    } 
    if (isLogging) {
        if (string.includes("START TEST REPORT")) {
            string = "[START TEST REPORT]\n" + string.split("[START TEST REPORT]")[1]
            fs.writeFileSync(fileName, string);
        } else {
            fs.appendFileSync(fileName, string);
        }
    }
    if (isLogging && string.includes("RESULT:")) {
        isLogging = false
        console.log('- RESULT:' + string.split("RESULT:")[1]);
        console.log('[[ socket end ]] at ', new Date());
        socket.end();
        socket.destroy();
    }
})

socket.on("timeout", function(err) {
    console.log("Connection closed");
    console.log('- unit Test Time out, please check the connection, either slowness or broken script');
    console.log('[[ socket end ]] at ', new Date());
    socket.end();
    socket.destroy();
})
0 Kudos