File: stash.js

package info (click to toggle)
firefox-esr 78.15.0esr-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,301,156 kB
  • sloc: cpp: 5,665,905; javascript: 4,798,386; ansic: 2,878,233; python: 977,004; asm: 270,347; xml: 181,456; java: 111,756; sh: 72,926; makefile: 21,819; perl: 13,380; cs: 4,725; yacc: 4,565; objc: 3,026; pascal: 1,787; lex: 1,720; ada: 1,681; exp: 505; php: 436; lisp: 260; awk: 152; ruby: 103; csh: 80; sed: 53; sql: 45
file content (83 lines) | stat: -rw-r--r-- 2,266 bytes parent folder | download | duplicates (33)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
var Stash = function(inbound, outbound) {
  this.stashPath = '/presentation-api/controlling-ua/support/stash.py?id=';
  this.inbound = inbound;
  this.outbound = outbound;
}

// initialize a stash on wptserve
Stash.prototype.init = function() {
  return Promise.all([
    fetch(this.stashPath + this.inbound).then(response => {
      return response.text();
    }),
    fetch(this.stashPath + this.outbound).then(response => {
      return response.text();
    })
  ]);
}

// upload a test result to a stash on wptserve
Stash.prototype.send = function(result) {
  return fetch(this.stashPath + this.outbound, {
    method: 'POST',
    body: JSON.stringify({ type: 'data', data: result })
  }).then(response => {
    return response.text();
  }).then(text => {
    return text === 'ok' ? null : Promise.reject();
  })
};

// wait until a test result is uploaded to a stash on wptserve
Stash.prototype.receive = function() {
  return new Promise((resolve, reject) => {
    let intervalId;
    const interval = 500; // msec
    const polling = () => {
      return fetch(this.stashPath + this.inbound).then(response => {
        return response.text();
      }).then(text => {
        if (text) {
          try {
            const json = JSON.parse(text);
            if (json.type === 'data')
              resolve(json.data);
            else
              reject();
          } catch(e) {
            resolve(text);
          }
          clearInterval(intervalId);
        }
      });
    };
    intervalId = setInterval(polling, interval);
  });
};

// reset a stash on wptserve
Stash.prototype.stop = function() {
  return Promise.all([
    fetch(this.stashPath + this.inbound).then(response => {
      return response.text();
    }),
    fetch(this.stashPath + this.outbound).then(response => {
      return response.text();
    })
  ]).then(() => {
    return Promise.all([
      fetch(this.stashPath + this.inbound, {
        method: 'POST',
        body: JSON.stringify({ type: 'stop' })
      }).then(response => {
        return response.text();
      }),
      fetch(this.stashPath + this.outbound, {
        method: 'POST',
        body: JSON.stringify({ type: 'stop' })
      }).then(response => {
        return response.text();
      })
    ]);
  });
}