Detailed Test Case from James Mike

You will begin the evaluation by finding some way to get a terminal connected to the platform.

This will either be through serial or SSH, with preference to serial (since it doesn't require TCP/IP knowledge).

The NPSDK customer would have been responsible for providing you with:

Hardware, power adapters, any special instructions about powering on the device. Current IP settings. If applicable, serial terminal configuration (baud/stopbits/etc) Login credentials for SSH/terminal (root access for evaluation is preferred) Login credentials for the Niagara Daemon Current System Passphrase of this platform (if set)

Once you can get a terminal, connnecting to the platform will usually look like:

login as: tridium
Debian GNU/Linux 7

tridium@192.168.7.2's password:
Access denied
tridium@192.168.7.2's password:
Access denied
tridium@192.168.7.2's password:
Access denied
tridium@192.168.7.2's password:

Capture a summary of the host for your own records, I generally do the followin:

Determine host information:

root@localhost:~# uname -a Linux localhost 4.4.62-ti-rt-r99 #2 SMP PREEMPT RT Mon Aug 28 11:52:28 EDT 2017 armv7l GNU/Linux

IP configuration:

root@localhost:~# ifconfig
can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP RUNNING NOARP  MTU:16  Metric:1
          RX packets:1301 errors:0 dropped:0 overruns:0 frame:0
          TX packets:146 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:9096 (8.8 KiB)  TX bytes:438 (438.0 B)
          Interrupt:167

eth0      Link encap:Ethernet  HWaddr 54:4a:16:fb:d0:90
          inet addr:10.2.0.140  Bcast:10.2.1.255  Mask:255.255.254.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:177

eth1      Link encap:Ethernet  HWaddr d8:80:39:3f:c9:78
          inet addr:192.168.1.126  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:401 errors:0 dropped:0 overruns:0 frame:0
          TX packets:401 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:36256 (35.4 KiB)  TX bytes:36256 (35.4 KiB)

usb0      Link encap:Ethernet  HWaddr 0e:c5:28:13:64:02
          inet addr:192.168.7.2  Bcast:192.168.7.3  Mask:255.255.255.252
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:578 errors:0 dropped:3 overruns:0 frame:0
          TX packets:182 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:55217 (53.9 KiB)  TX bytes:36646 (35.7 KiB)
      

Passwords:

root@localhost:~# cat /etc/shadow
root:$6$VlD6Al90$Ct5mnU1w0oVyc8W1ZRww734yhYlMq7jwoZd0fyIq1Q6E.AlDhPRAyz98q37xOqhfMPg1P1WzzmHvEe0vgfxl4.:16495:0:99999:7:::
daemon:*:16495:0:99999:7:::
bin:*:16495:0:99999:7:::
sys:*:16495:0:99999:7:::
sync:*:16495:0:99999:7:::
games:*:16495:0:99999:7:::
man:*:16495:0:99999:7:::
lp:*:16495:0:99999:7:::
mail:*:16495:0:99999:7:::
news:*:16495:0:99999:7:::
uucp:*:16495:0:99999:7:::
proxy:*:16495:0:99999:7:::
www-data:*:16495:0:99999:7:::
backup:*:16495:0:99999:7:::
list:*:16495:0:99999:7:::
irc:*:16495:0:99999:7:::
gnats:*:16495:0:99999:7:::
nobody:*:16495:0:99999:7:::
libuuid:!:16495:0:99999:7:::
sshd:*:16495:0:99999:7:::
messagebus:*:16496:0:99999:7:::
colord:*:16496:0:99999:7:::
saned:*:16496:0:99999:7:::

Groups:

root@localhost:~# cat /etc/group
root:*:0:
daemon:*:1:
bin:*:2:
sys:*:3:
adm:*:4:
tty:*:5:
disk:*:6:
lp:*:7:
mail:*:8:
news:*:9:
uucp:*:10:
man:*:12:
proxy:*:13:
kmem:*:15:niagara
dialout:*:20:niagara
fax:*:21:
voice:*:22:
cdrom:*:24:
floppy:*:25:
tape:*:26:
sudo:*:27:
audio:*:29:
dip:*:30:
www-data:*:33:
backup:*:34:
operator:*:37:
list:*:38:
irc:*:39:
src:*:40:
gnats:*:41:
shadow:*:42:
utmp:*:43:
video:*:44:
sasl:*:45:
plugdev:*:46:
staff:*:50:
games:*:60:
users:*:100:
nogroup:*:65534:
libuuid:!:101:
crontab:!:102:
ssh:!:103:
admin:!:999:
spi:!:998:
i2c:!:997:niagara
netdev:!:996:
systemd-journal:!:995:
weston-launch:!:994:
xenomai:!:993:
fuse:!:104:
scanner:!:105:saned
messagebus:!:106:
colord:!:107:
saned:!:108:
niagarad:!:3011:niagara
ntp:x:109:
niagara:!:1000:

Users:

root@localhost:~# cat /etc/passwd
root:$6$geiSz0m.$D/JAfnah787Ja3eCetXfgDsUvFyowUS9LmvqVhiqEd625u3LEXhvoXZL2kdon1M5zaH5GQ6u.tgmC5ATXG4VP1:0:0:root:/root:/bin/bash
daemon:*:1:1:daemon:/usr/sbin:/bin/sh
bin:*:2:2:bin:/bin:/bin/sh
sys:*:3:3:sys:/dev:/bin/sh
sync:*:4:65534:sync:/bin:/bin/sync
games:*:5:60:games:/usr/games:/bin/sh
man:*:6:12:man:/var/cache/man:/bin/sh
lp:*:7:7:lp:/var/spool/lpd:/bin/sh
mail:*:8:8:mail:/var/mail:/bin/sh
news:*:9:9:news:/var/spool/news:/bin/sh
uucp:*:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:*:13:13:proxy:/bin:/bin/sh
www-data:*:33:33:www-data:/var/www:/bin/sh
backup:*:34:34:backup:/var/backups:/bin/sh
list:*:38:38:Mailing List Manager:/var/list:/bin/sh
irc:*:39:39:ircd:/var/run/ircd:/bin/sh
gnats:*:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:*:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:!:100:101::/var/lib/libuuid:/bin/sh
sshd:*:101:65534::/var/run/sshd:/usr/sbin/nologin
messagebus:*:102:106::/var/run/dbus:/bin/false
colord:*:103:107:colord colour management daemon,,,:/var/lib/colord:/bin/false
saned:*:104:108::/home/saned:/bin/false
ntp:*:105:109::/home/ntp:/bin/false
statd:*:106:65534::/var/lib/nfs:/bin/false
niagara:$6$gCwo5vUS$L/pawFjn3wMVteXS.VQL7BfkSI.Wxo7PAwuFqS.PwDfzco3CiZN8lG2bjc3A2aFbH7C.vaG/0zAy71XXG5Uyi.:1000:1000::/home/niagara:/bin/bash

Running processes:

root@localhost:~# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 14:29 ?        00:00:04 /lib/systemd/systemd
root         2     0  0 14:29 ?        00:00:00 [kthreadd]
root         3     2  0 14:29 ?        00:00:00 [ksoftirqd/0]
root         4     2  2 14:29 ?        00:00:19 [ktimersoftd/0]
root         5     2  0 14:29 ?        00:00:04 [kworker/0:0]
root         6     2  0 14:29 ?        00:00:00 [kworker/0:0H]
root         7     2  0 14:29 ?        00:00:00 [kworker/u2:0]
root         8     2  0 14:29 ?        00:00:00 [rcu_preempt]
root         9     2  0 14:29 ?        00:00:00 [rcu_sched]
root        10     2  0 14:29 ?        00:00:00 [rcuc/0]
root        11     2  0 14:29 ?        00:00:00 [kclksetdelayd]
root        12     2  0 14:29 ?        00:00:00 [posixcputmr/0]
root        13     2  0 14:29 ?        00:00:00 [kcmosdelayd]
root        14     2  0 14:29 ?        00:00:00 [migration/0]
root        15     2  0 14:29 ?        00:00:00 [watchdog/0]
root        16     2  0 14:29 ?        00:00:00 [kdevtmpfs]
root        18     2  0 14:29 ?        00:00:00 [netns]
root        19     2  0 14:29 ?        00:00:00 [kswork]
root        20     2  0 14:29 ?        00:00:00 [perf]
root        21     2  0 14:29 ?        00:00:00 [irq/26-44e07000]
root        22     2  0 14:29 ?        00:00:00 [irq/59-4804c000]
root        23     2  0 14:29 ?        00:00:00 [irq/92-481ac000]
root        24     2  0 14:29 ?        00:00:00 [irq/125-481ae00]
root        25     2  0 14:29 ?        00:00:00 [khungtaskd]
root        26     2  0 14:29 ?        00:00:00 [writeback]
root        27     2  0 14:29 ?        00:00:00 [ksmd]
root        28     2  0 14:29 ?        00:00:00 [crypto]
root        29     2  0 14:29 ?        00:00:00 [kintegrityd]
root        30     2  0 14:29 ?        00:00:00 [bioset]
root        31     2  0 14:29 ?        00:00:00 [kblockd]
root        32     2  0 14:29 ?        00:00:00 [irq/20-49000000]
root        33     2  0 14:29 ?        00:00:00 [irq/22-49000000]
root        34     2  0 14:29 ?        00:00:00 [ata_sff]
root        35     2  0 14:29 ?        00:00:00 [devfreq_wq]
root        36     2  0 14:29 ?        00:00:00 [rpciod]
root        37     2  0 14:29 ?        00:00:00 [kswapd0]
root        38     2  0 14:29 ?        00:00:00 [vmstat]
root        39     2  0 14:29 ?        00:00:00 [fsnotify_mark]
root        40     2  0 14:29 ?        00:00:00 [nfsiod]
root        41     2  0 14:29 ?        00:00:00 [xfsalloc]
root        42     2  0 14:29 ?        00:00:00 [xfs_mru_cache]
root        65     2  0 14:29 ?        00:00:00 [kthrotld]
root        68     2  0 14:29 ?        00:00:00 [kapmd]
root        71     2  2 14:29 ?        00:00:24 [irq/184-musb-hd]
root        72     2  0 14:29 ?        00:00:00 [irq/185-musb-hd]
root        73     2  0 14:29 ?        00:00:00 [irq/186-4740000]
root        74     2  0 14:29 ?        00:00:00 [irq/174-rtc0]
root        75     2  0 14:29 ?        00:00:00 [irq/175-rtc0]
root        76     2  0 14:29 ?        00:00:00 [irq/164-mmc0]
root        77     2  0 14:29 ?        00:00:00 [irq/33-48060000]
root        78     2  0 14:29 ?        00:00:00 [irq/165-mmc1]
root        79     2  0 14:29 ?        00:00:00 [bioset]
root        80     2  0 14:29 ?        00:00:01 [mmcqd/1]
root        81     2  0 14:29 ?        00:00:00 [binder]
root        82     2  0 14:29 ?        00:00:00 [bioset]
root        83     2  0 14:29 ?        00:00:00 [mmcqd/1boot0]
root        84     2  0 14:29 ?        00:00:00 [bioset]
root        85     2  0 14:29 ?        00:00:00 [mmcqd/1boot1]
root        86     2  0 14:29 ?        00:00:00 [ipv6_addrconf]
root        87     2  0 14:29 ?        00:00:00 [bioset]
root        96     2  0 14:29 ?        00:00:00 [deferwq]
root        97     2  0 14:29 ?        00:00:00 [irq/161-44e0b00]
root        98     2  0 14:29 ?        00:00:00 [irq/187-tps6521]
root        99     2  0 14:29 ?        00:00:00 [irq/162-4819c00]
root       100     2  0 14:29 ?        00:00:00 [irq/19-wkup_m3_]
root       101     2  0 14:29 ?        00:00:00 [irq/168-wkup_m3]
root       104     2  0 14:29 ?        00:00:00 [kworker/0:1H]
root       105     2  0 14:29 ?        00:00:00 [jbd2/mmcblk1p1-]
root       106     2  0 14:29 ?        00:00:00 [ext4-rsv-conver]
root       147     1  0 14:29 ?        00:00:00 /lib/systemd/systemd-journald
root       149     2  0 14:29 ?        00:00:00 [kauditd]
root       154     1  0 14:29 ?        00:00:00 /sbin/udevd
root       188     2  0 14:29 ?        00:00:00 [kworker/0:3]
root       234     1  0 14:29 ?        00:00:00 /sbin/rpcbind -w
statd      296     1  0 14:29 ?        00:00:00 /sbin/rpc.statd
root       341     1  0 14:29 ?        00:00:00 /usr/sbin/rpc.idmapd
102        381     1  0 14:29 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root       427     1  0 14:29 ?        00:00:00 /lib/systemd/systemd-logind
root       433     1  0 14:29 ?        00:00:00 /usr/sbin/console-kit-daemon --no-daemon
root       436     2  0 14:29 ?        00:00:00 [kworker/u2:2]
root       438     1  0 14:29 ?        00:00:00 /usr/sbin/rsyslogd -n -c5
ntp        553     1  0 14:29 ?        00:00:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:109
root       619     1  0 14:29 ?        00:00:00 /usr/lib/policykit-1/polkitd --no-debug
root       625     1  0 14:29 ?        00:00:00 /usr/sbin/cron
root       660     2  0 14:29 ?        00:00:00 [nfsd4_callbacks]
root       661     2  0 14:29 ?        00:00:00 [lockd]
root       668     2  0 14:29 ?        00:00:00 [spi1]
root       669     2  0 14:29 ?        00:00:00 [nfsd]
root       670     2  0 14:29 ?        00:00:00 [nfsd]
root       671     2  0 14:29 ?        00:00:00 [nfsd]
root       672     2  0 14:29 ?        00:00:00 [nfsd]
root       673     2  0 14:29 ?        00:00:00 [nfsd]
root       674     2  0 14:29 ?        00:00:00 [nfsd]
root       675     2  0 14:29 ?        00:00:00 [nfsd]
root       676     2  0 14:29 ?        00:00:00 [nfsd]
root       687     1  0 14:29 ttyS0    00:00:00 /sbin/agetty -s ttyS0 115200 38400 9600
niagara    694     1  5 14:29 ?        00:00:48 /opt/niagara/bin/niagarad
root       696     2  0 14:29 ?        00:00:00 [irq/158-44e0900]
root       750     1  0 14:29 ?        00:00:00 /usr/sbin/udhcpd -S /etc/udhcpd.conf
root       758     2  0 14:29 ?        00:00:00 [encx24j600]
root       771     2  0 14:29 ?        00:00:00 [irq/101-encx24j]
root       775   154  0 14:29 ?        00:00:00 /sbin/udevd
root       776   154  0 14:29 ?        00:00:00 /sbin/udevd
root       777     2  0 14:29 ?        00:00:00 [irq/182-4831000]
root       783     2  0 14:29 ?        00:00:00 [irq/167-can0]
root       788     2  0 14:29 ?        00:00:00 [irq/180-5310000]
root       811     1  0 14:29 ?        00:00:00 /usr/sbin/rpc.mountd --manage-gids --no-nfs-version 3
root       825     1  0 14:29 tty1     00:00:00 /sbin/agetty tty1 38400
root       936     1  0 14:29 ?        00:00:00 /usr/sbin/sshd
root       971   553  0 14:31 ?        00:00:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:109
root       972     2  0 14:34 ?        00:00:00 [kworker/0:1]
root       975   936  0 14:39 ?        00:00:00 sshd: root@pts/0
root       977   975  0 14:40 pts/0    00:00:00 -bash
root       983     2  0 14:41 ?        00:00:00 [kworker/u2:1]
root       993   977  0 14:43 pts/0    00:00:00 ps -ef

Active connections:

root@localhost:~# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:8770            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:3011            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:19058           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5011            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:36787           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:11605           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0     64 192.168.7.2:22          192.168.7.1:55982       ESTABLISHED
tcp6       0      0 :::5818                 :::*                    LISTEN
tcp6       0      0 :::10816                :::*                    LISTEN
tcp6       0      0 :::2049                 :::*                    LISTEN
tcp6       0      0 :::780                  :::*                    LISTEN
tcp6       0      0 :::111                  :::*                    LISTEN
tcp6       0      0 :::850                  :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
udp        0      0 0.0.0.0:111             0.0.0.0:*
udp        0      0 192.168.1.126:123       0.0.0.0:*
udp        0      0 192.168.7.2:123         0.0.0.0:*
udp        0      0 10.2.0.140:123          0.0.0.0:*
udp        0      0 127.0.0.1:123           0.0.0.0:*
udp        0      0 0.0.0.0:123             0.0.0.0:*
udp        0      0 127.0.0.1:896           0.0.0.0:*
udp        0      0 0.0.0.0:13007           0.0.0.0:*
udp        0      0 0.0.0.0:2049            0.0.0.0:*
udp        0      0 0.0.0.0:24877           0.0.0.0:*
udp        0      0 0.0.0.0:824             0.0.0.0:*
udp        0      0 0.0.0.0:67              0.0.0.0:*
udp        0      0 0.0.0.0:20307           0.0.0.0:*
udp        0      0 0.0.0.0:8534            0.0.0.0:*
udp6       0      0 :::14701                :::*
udp6       0      0 :::111                  :::*
udp6       0      0 :::123                  :::*
udp6       0      0 :::52922                :::*
udp6       0      0 :::54984                :::*
udp6       0      0 :::1761                 :::*
udp6       0      0 :::2049                 :::*
udp6       0      0 :::824                  :::*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    11858    /run/systemd/notify
unix  2      [ ACC ]     STREAM     LISTENING     11860    /run/systemd/private
unix  2      [ ]         DGRAM                    11873    /run/systemd/journal/syslog
unix  2      [ ACC ]     SEQPACKET  LISTENING     11879    /run/udev/control
unix  2      [ ]         DGRAM                    11882    /run/systemd/shutdownd
unix  2      [ ACC ]     STREAM     LISTENING     11888    /run/systemd/journal/stdout
unix  4      [ ]         DGRAM                    11890    /run/systemd/journal/socket
unix  8      [ ]         DGRAM                    11892    /dev/log
unix  2      [ ACC ]     STREAM     LISTENING     13736    /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     13229    /var/run/rpcbind.sock
unix  3      [ ]         STREAM     CONNECTED     14589
unix  3      [ ]         STREAM     CONNECTED     14969    /var/run/dbus/system_bus_socket
unix  2      [ ]         DGRAM                    12521
unix  2      [ ]         DGRAM                    14873
unix  3      [ ]         DGRAM                    12447
unix  2      [ ]         STREAM     CONNECTED     15353
unix  2      [ ]         DGRAM                    15026
unix  3      [ ]         STREAM     CONNECTED     14967
unix  3      [ ]         STREAM     CONNECTED     14184
unix  3      [ ]         STREAM     CONNECTED     14188
unix  3      [ ]         STREAM     CONNECTED     14960
unix  3      [ ]         STREAM     CONNECTED     14186    /run/systemd/journal/stdout
unix  3      [ ]         STREAM     CONNECTED     15185    /var/run/dbus/system_bus_socket
unix  2      [ ]         DGRAM                    15200
unix  3      [ ]         STREAM     CONNECTED     15313    /var/run/dbus/system_bus_socket
unix  2      [ ]         DGRAM                    13419
unix  3      [ ]         STREAM     CONNECTED     13692
unix  3      [ ]         STREAM     CONNECTED     14654    /run/systemd/journal/stdout
unix  2      [ ]         DGRAM                    17562
unix  3      [ ]         STREAM     CONNECTED     14652
unix  2      [ ]         STREAM     CONNECTED     17519
unix  3      [ ]         STREAM     CONNECTED     14655    /run/systemd/journal/stdout
unix  3      [ ]         DGRAM                    12448
unix  2      [ ]         DGRAM                    15556
unix  3      [ ]         STREAM     CONNECTED     14966
unix  3      [ ]         STREAM     CONNECTED     14968    /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     14970    /var/run/dbus/system_bus_socket
unix  2      [ ]         DGRAM                    15913
unix  3      [ ]         STREAM     CONNECTED     14932
unix  3      [ ]         STREAM     CONNECTED     15184
unix  3      [ ]         STREAM     CONNECTED     15312
unix  3      [ ]         STREAM     CONNECTED     13691       

The following filesystems are available:

Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        3610232 2108220   1298904  62% /
devtmpfs          224632       0    224632   0% /dev
tmpfs             249560       0    249560   0% /dev/shm
tmpfs             249560     396    249164   1% /run
tmpfs             249560       0    249560   0% /sys/fs/cgroup
tmpfs               5120       0      5120   0% /run/lock
tmpfs             102400       0    102400   0% /run/user    

Generally you're not looking for any errors here but you can scan it for information that might be relevant to your evaluation, such as output above suggests that the Niagara Daemon is running on port 3011/5011

root@localhost:~# ps -ef | grep niagarad | grep -v grep
niagara    694     1  5 14:29 ?        00:00:49 /opt/niagara/bin/niagarad

This output also demonstrates that the Niagara Dameon is not running as root (which is good). At this level you are only looking for anything glaringly odd - like Niagara Daemon running as root, or /etc/group is missing, or something to that end. Usually when its something really odd you'll know it when you see it.

Now that you have shell access, figure out what the following values are:

Niagara User Home
Niagara Home
JRE Home

Make note of anything odd here - under most circumstances we expect the NPSDK customer to have selected /opt/niagara and /home/niagara - if there is version information in either of these values, or the values are for only one user (/root/Niagara4.1) that would be cause for concern.

Niagara Home and Niagara User Home should be set by environment variables.

Record the values found at NIAGARA_HOME/bin/nreVersion.xml

nreVersion.xml appears to have values:

root@localhost:/opt/niagara/bin# cat nreVersion.xml

<nre name="nre-core-Tridium-linux-armhf" desc="Niagara Core for Tridium TRID-EVAL-N4" version="4.2.36.34" />

Make note of anything odd, or if it is missing. This document should define these platform, it shouldn't have values that don't make sense for this platform (x86_64 on a arm platform for example).

Record the values found at JRE_HOME (most likely NIAGARA_HOME/jre/jreVersion.xml):

jreVersion.xml appears to have values:

root@localhost:/opt/niagara/jre# cat jreVersion.xml

Make note of anything odd, or if it is missing. This document should define these platform, it shouldn't have values that don't make sense for this platform (x86_64 on a arm platform for example). It should represent the JRE that the NPSDK customer has licensed.

Make sure these values match up to what JRE is actually being used by the platform, for example:

The version of Java installed at /opt/niagara/jre shows:

root@localhost:/opt/niagara/jre/bin# ./java -version java version "1.8.0_101" Java(TM) SE Runtime Environment (build 1.8.0_101-b13) Java HotSpot(TM) Client VM (build 25.101-b13, mixed mode)

Make sure it is consistent with what's in jreVersion.xml, if it isn't make a note of it.

Examine the daemon.properties file at NIAGARA_USER_HOME/daemon/daemon.properties:

root@localhost:/home/niagara/daemon# cat daemon.properties
#Do not modify the contents of this file
#Tue Sep 05 14:30:15 EDT 2017
runtimeProfilesEnabled=rt,ux,wb
user=tridium
password=asdfasdfasdfadsfdsafasdfasfasdfsadfsdf
authtype=digest/file

Verify the authentication type being used, if it is not a native scheme, write it up - customer must be using native schemes. The above would represent a platform that is not using native as we expect.

Having some investigation about the platform, connect to the Niagara Daemon with Workbench - make sure connection occurs as you expect.

Navigate to Platform Administration -> View Details:

Platform summary for 192.168.7.2
--------------------------------

Daemon Version:       4.2.36.34
Daemon HTTP Port:     3011
Host ID:              TRID-EVAL-1000-1234-1234
Niagara Runtime:      nre-core-Tridium-linux-armhf (4.2.36.34)
Architecture:         armhf
Number of CPUs:       1
Model:                TRID-EVAL
Product:              TRID-EVAL
Operating System:     linux (7)
Java Virtual Machine: java-linux-arm (Oracle Corporation 1.8.0.101)
Niagara Stations Enabled: enabled
Platform TLS Support: enabled
Port:                 5011
Certificate:          tridium
Protocol:             TLSv1.0+
System Home:          /opt/niagara
User Home:            /home/niagara

Physical RAM  Free            Total         
                  348,648 KB      499,120 KB

Filesystem    Free            Total           
  /             1,497,688 KB    3,610,232 KB  

Modules
  alarm-rt (Tridium 4.2.36.38)
  alarm-ux (Tridium 4.2.36.38)
  alarm-wb (Tridium 4.2.36.38)
  app-rt (Tridium 4.2.36.38)
  app-wb (Tridium 4.2.36.34)
  backup-rt (Tridium 4.2.36.38)
  backup-wb (Tridium 4.2.36.38)
  bacnet-rt (Tridium 4.2.36.38)
  bacnet-ux (Tridium 4.2.36.34)
  bacnet-wb (Tridium 4.2.36.38)
  baja (Tridium 4.2.36.38)
  bajaScript-ux (Tridium 4.2.36.38)
  bajaui-wb (Tridium 4.2.36.38)
  bajaux-rt (Tridium 4.2.36.38)
  bajaux-ux (Tridium 4.2.36.38)
  basicDriver-rt (Tridium 4.2.36.38)
  box-rt (Tridium 4.2.36.38)
  bql-rt (Tridium 4.2.36.38)
  bql-ux (Tridium 4.2.36.38)
  chart-rt (Tridium 4.2.36.38)
  chart-wb (Tridium 4.2.36.38)
  control-rt (Tridium 4.2.36.38)
  control-wb (Tridium 4.2.36.34)
  converters-rt (Tridium 4.2.36.38)
  dashboard-rt (Tridium 4.2.36.34)
  dashboard-ux (Tridium 4.2.36.34)
  dashboard-wb (Tridium 4.2.36.34)
  driver-rt (Tridium 4.2.36.38)
  driver-ux (Tridium 4.2.36.34)
  driver-wb (Tridium 4.2.36.38)
  entityIo-rt (Tridium 4.2.36.38)
  exportTags-rt (Tridium 4.2.36.34)
  exportTags-wb (Tridium 4.2.36.34)
  file-rt (Tridium 4.2.36.38)
  fonts-rt (Tridium 4.2.36.38)
  fox-rt (Tridium 4.2.36.38)
  gx-rt (Tridium 4.2.36.38)
  gx-wb (Tridium 4.2.36.38)
  haystack-rt (Tridium 4.2.36.34)
  hierarchy-rt (Tridium 4.2.36.38)
  hierarchy-ux (Tridium 4.2.36.34)
  hierarchy-wb (Tridium 4.2.36.34)
  history-rt (Tridium 4.2.36.38)
  history-ux (Tridium 4.2.36.38)
  history-wb (Tridium 4.2.36.38)
  html-wb (Tridium 4.2.36.38)
  hx-wb (Tridium 4.2.36.38)
  icons-ux (Tridium 4.2.36.38)
  jetty-rt (Tridium 4.2.36.38)
  js-ux (Tridium 4.2.36.38)
  jxBrowser-wb (Tridium 4.2.36.38)
  kitControl-rt (Tridium 4.2.36.38)
  kitControl-wb (Tridium 4.2.36.34)
  kitPx-wb (Tridium 4.2.36.38)
  modbusCore-rt (Tridium 4.2.36.34)
  modbusCore-wb (Tridium 4.2.36.34)
  modbusTcp-rt (Tridium 4.2.36.34)
  modbusTcp-wb (Tridium 4.2.36.34)
  ndio-rt (Tridium 4.2.36.38)
  ndriver-rt (Tridium 4.2.36.38)
  neql-rt (Tridium 4.2.36.38)
  net-rt (Tridium 4.2.36.38)
  niagaraDriver-rt (Tridium 4.2.36.38)
  niagaraDriver-wb (Tridium 4.2.36.38)
  niagaraVirtual-rt (Tridium 4.2.36.38)
  niagaraVirtual-wb (Tridium 4.2.36.38)
  nrio-rt (Tridium 4.2.36.38)
  nrio-wb (Tridium 4.2.36.38)
  nsh-wb (Tridium 4.2.36.38)
  pdf-wb (Tridium 4.2.36.38)
  platBacnet-rt (Tridium 4.2.36.38)
  platCrypto-rt (Tridium 4.2.36.38)
  platCrypto-wb (Tridium 4.2.36.38)
  platMstp-rt (Tridium 4.2.36.38)
  platNdio-rt (Tridium 4.2.36.38)
  platNrio-rt (Tridium 4.2.36.38)
  platSerial-rt (Tridium 4.2.36.38)
  platSerialNpsdk-rt (Tridium 4.2.36.38)
  platform-rt (Tridium 4.2.36.38)
  platform-wb (Tridium 4.2.36.38)
  program-rt (Tridium 4.2.36.38)
  program-wb (Tridium 4.2.36.38)
  pxEditor-wb (Tridium 4.2.36.38)
  query-rt (Tridium 4.2.36.38)
  queryTable-wb (Tridium 4.2.36.38)
  schedule-rt (Tridium 4.2.36.38)
  schedule-wb (Tridium 4.2.36.38)
  search-rt (Tridium 4.2.36.38)
  search-ux (Tridium 4.2.36.34)
  search-wb (Tridium 4.2.36.34)
  serial-rt (Tridium 4.2.36.38)
  smartTableHx-wb (Tridium 4.2.36.38)
  tagdictionary-rt (Tridium 4.2.36.38)
  tagdictionary-wb (Tridium 4.2.36.34)
  template-rt (Tridium 4.2.36.38)
  template-wb (Tridium 4.2.36.38)
  themeZebra-ux (Tridium 4.2.36.38)
  wbutil-wb (Tridium 4.2.36.38)
  web-rt (Tridium 4.2.36.38)
  webChart-rt (Tridium 4.2.36.38)
  webChart-ux (Tridium 4.2.36.38)
  webEditors-ux (Tridium 4.2.36.38)
  wiresheet-wb (Tridium 4.2.36.38)
  workbench-wb (Tridium 4.2.36.38)

Other Parts
  None

Applications

Lexicons

Licenses
  Tridium.license (Tridium 4.3 - expires 2017-10-20)
  Tridium.license (Tridium 4.3 - expires 2017-10-20)

Certificates
  Tridium.certificate (Tridium - never expires)
  Tridium.certificate (Tridium - never expires)
  

Basically make sure nothing is odd here - values should match what is defined in nreVersion.xml, jreVersion.xml and so forth. NPSDK customers should not be using Tridium host model names, model names should not contain spaces. The Host ID should not be a Tridium format (LNX-****).

Now start running the test_* harnesses that should be available in NIAGARA_HOME/bin.All of the tests should pass, it a test does not pass, write it up. Usage of these tests should be found in the NPSDK documentation. Some example output is below:

Running the test_provider_api test harness:

    root@localhost:/opt/niagara/bin# ./test_provider_api
    WARNING: this application has been launched as root, which may allow for
    the creation of files with restrictive permissions, rendering them unreadable
    or writeable by the group niagara. Therefore, it is STRONGLY DISCOURAGED!
    Please launch it as a user of the group niagara to avoid complications.
    #### com.tridium.npsdk.test.providers.AuthenticationProviderTest ####
    -- com.tridium.npsdk.test.providers.AuthenticationProviderTest.testNullParameter
    IPlatformProvider::getSupportedAuthenticationTypes()
    
      value = digest/file
    
    
    IPlatformProvider::synchronizeUsers(null, foo)
    IPlatformProvider::synchronizeUsers(foo, null)
       Passed [0 verifies]
    
    ...
    
    Failures:
      com.tridium.npsdk.test.providers.TimeUtilProviderTest.testSetNativeTimeZone
    
    *** 1 failures

In this example the TimeZone settings fails, write any failures up with a note and provide any details you may consider relevant for the NPSDK customer to investigate

Some additional items you can find in the test_provider_api output:

System passphrase for this platform is "niagara"

The temporary directory path is:

"/var/tmp"

The default user name and password are:

"tridium" / "niagara"

Supported authentication types are "digest/file" (confirms above note).

The alarm/history ramdisk is disabled:

"alternative path = null"

So this device will use /home/niagara/stations/[station_name] as the root directory for the alarm and history databases.

Make a note of these for your records and make note of anything odd.

Next run the test_niagarad_web test harness from your local PC to connect to this platform (fill in appropriate IP, user, pass)

  D:\Niagara\r42\niagara_dev_home>test_niagarad_web 172.16.10.121 3011 three2 Niagara123
  *******************************************************
  **** DEVELOPER BUILD FOR INTERNAL TRIDIUM USE ONLY ****
  *******************************************************
  
  Testing with:
          Host: 172.16.10.121
          Port: 3011
          User: three2
          Password: Niagara123
          Secure: false
  
  #### com.tridium.npsdk.test.servlets.CheckServletTest ####
  -- com.tridium.npsdk.test.servlets.CheckServletTest.test
  Sending request URI "GET /check"
     Passed [2 verifies]
  
  #### com.tridium.npsdk.test.servlets.DefaultServletTest ####
  -- com.tridium.npsdk.test.servlets.DefaultServletTest.test
  Sending request URI "GET /"
  
  *******************************************************************
  * WARNING: This daemon uses HTTP-Digest platform authentication!  *
  *                                                                 *
  * This method of platform authentication is only secure when used *
  * in combination with HTTPS (TLS) connections and should only be  *
  * used for evaluation purposes.                                   *
  *******************************************************************
  

...

    totalServlets:      23
    totalMethods:       23
    totalMethodsPassed: 23
    totalMethodsFailed: 0
    totalVerifies:      12151
  
  *** All tests passed!!!
  
  
  D:\Niagara\r42\niagara_dev_home>
  

Make sure all tests pass, make a note of any failures.

Next check the VM settings of the Nre/Java Launchers:

You can turn on NRE debugging with "export nre_debug=1" and JAVA debugging with "export java_debug=1"

Launching a station with debug shows:

  root@localhost:/opt/niagara/bin# ./station
  WARNING: this application has been launched as root, which may allow for
  the creation of files with restrictive permissions, rendering them unreadable
  or writeable by the group niagara. Therefore, it is STRONGLY DISCOURAGED!
  Please launch it as a user of the group niagara to avoid complications.
  nre> debug = true
  nre> initPaths()
  nre>   niagaraHome              = /opt/niagara
  nre>   niagaraUserHome          = /home/niagara
  nre>   supportedRuntimeProfiles = rt,ux,wb,doc
  nre>   requiredRuntimeProfiles  = rt
  nre>   jreHome                  = /opt/niagara/jre
  nre>   jvmDll_0                 = /opt/niagara/jre/lib/arm/server/libjvm.so
  nre>   jvmDll_1                 = /opt/niagara/jre/lib/arm/client/libjvm.so
  nre>   jvmDll_2                 = none
  nre>   libPath                  = /opt/niagara/bin:
  nre>   classPath                = /opt/niagara/modules/baja.jar:/opt/niagara/bin/ext/bcpkix-jdk15on-154.jar:/opt/niagara/bin/ext/bcprov-jdk15on-154.jar:/opt/niagara/bin/ext                                                  /encoder-1.1.1.jar:/opt/niagara/bin/ext/javax.servlet-api-3.1.0.jar:/opt/niagara/bin/ext/jetty-all-compact3-9.3.6.v20151106.jar:/opt/niagara/bin/ext/jettyWrapper.jar:/opt/n                                                  iagara/bin/ext/jxbrowser/runtime.jar:/opt/niagara/bin/ext/niagarad.jar:/opt/niagara/bin/ext/nre.jar:/opt/niagara/bin/ext/org.json-chargebee-1.0.jar:/opt/niagara/bin/ext/tri                                                  dium-JavaMail-1.5.2.1.jar:/opt/niagara/bin/ext/tridium-activation-1.0.jar
  nre> buildArgs()
  nre>   argv[1] = "com.tridium.sys.station.Station"
  nre>   javaArgs[0] = "com.tridium.sys.station.Station"
  nre> loadDLL()
  nre>   Using dll = /opt/niagara/jre/lib/arm/server/libjvm.so
  INFO [nre] Launching Niagara Runtime Environment
  nre> createVM()
  nre>   VM options:
  nre>     javaOption[0] = "-Djava.library.path=/opt/niagara/bin:"
  nre>     javaOption[1] = "-Dniagara.home=/opt/niagara"
  nre>     javaOption[2] = "-Dniagara.user.home=/home/niagara"
  nre>     javaOption[3] = "-Djava.class.path=/opt/niagara/modules/baja.jar:/opt/niagara/bin/ext/bcpkix-jdk15on-154.jar:/opt/niagara/bin/ext/bcprov-jdk15on-154.jar:/opt/niaga                                                  ra/bin/ext/encoder-1.1.1.jar:/opt/niagara/bin/ext/javax.servlet-api-3.1.0.jar:/opt/niagara/bin/ext/jetty-all-compact3-9.3.6.v20151106.jar:/opt/niagara/bin/ext/jettyWrapper.                                                  jar:/opt/niagara/bin/ext/jxbrowser/runtime.jar:/opt/niagara/bin/ext/niagarad.jar:/opt/niagara/bin/ext/nre.jar:/opt/niagara/bin/ext/org.json-chargebee-1.0.jar:/opt/niagara/b                                                  in/ext/tridium-JavaMail-1.5.2.1.jar:/opt/niagara/bin/ext/tridium-activation-1.0.jar"
  nre>     javaOption[4] = "-Dniagara.platform.provider=com.tridium.nre.platform.NativePlatformProviderNpsdk"
  nre>     javaOption[5] = "-Dniagara.supported.runtime.profiles=rt,ux,wb,doc"
  nre>     javaOption[6] = "-Dniagara.required.runtime.profiles=rt"
  nre>     javaOption[7] = "-Djava.security.properties==/opt/niagara/security/policy/java.security"
  nre>     javaOption[8] = "-Djava.security.manager"
  nre>     javaOption[9] = "-Djava.protocol.handler.pkgs=com.tridium.nre.protocol"
  nre>     javaOption[10] = "-Djava.security.egd=file:/dev/./urandom"
  nre>     javaOption[11] = "exit"
  nre> invokeNRE()
  nre>   Find main class...com/tridium/nre/bootstrap/Bootstrap
  nre>   Find main method...
  nre>   Build java arguments...
  nre>     java arguments:
  nre>     javaArgument[0] = "com.tridium.sys.station.Station"
  nre>   Launching main method...
  

Again, make a note of anything that stands out as odd, retain any information as necessary for your records. This is items such as:

Platform is using LOW_ENTROPY (urandom) Platform is using the following custom Xmx Xms values What are the support runtime profiles? What are the required profiles? Make sure the security manager is not disabled, etc.

Do the same for the Niagara Dameon:

Niagara Daemon:

  root@localhost:/opt/niagara/bin# ./niagarad /console
  WARNING: this application has been launched as root, which may allow for
  the creation of files with restrictive permissions, rendering them unreadable
  or writeable by the group niagara. Therefore, it is STRONGLY DISCOURAGED!
  Please launch it as a user of the group niagara to avoid complications.
  java> debug = true
  java> initPaths()
  java>   niagaraHome              = /opt/niagara
  java>   niagaraUserHome          = /home/niagara
  java>   supportedRuntimeProfiles = rt,ux,wb,doc
  java>   requiredRuntimeProfiles  = rt
  java>   jreHome                  = /opt/niagara/jre
  java>   jvmDll_0                 = /opt/niagara/jre/lib/arm/server/libjvm.so
  java>   jvmDll_1                 = /opt/niagara/jre/lib/arm/client/libjvm.so
  java>   libPath                  = /opt/niagara/bin:
  java>   classPath                = /opt/niagara/bin/ext/bcpkix-jdk15on-154.jar:/opt/niagara/bin/ext/bcprov-jdk15on-154.jar:/opt/niagara/bin/ext/encoder-1.1.1.jar:/opt/niagara/bin/ext/javax.servlet-api-3.1.0.jar:/opt/niagara/bin/ext/jetty-all-compact3-9.3.6.v20151106.jar:/opt/niagara/bin/ext/jettyWrapper.jar:/opt/niagara/bin/ext/jxbrowser/runtime.jar:/opt/niagara/bin/ext/niagarad.jar:/opt/niagara/bin/ext/nre.jar:/opt/niagara/bin/ext/org.json-chargebee-1.0.jar:/opt/niagara/bin/ext/tridium-JavaMail-1.5.2.1.jar:/opt/niagara/bin/ext/tridium-activation-1.0.jar
  java> buildArgs()
  java>   argv[1] = "/console"
  java>   javaArgs[0] = "/console"
  java> loadDLL()
  java>   Using dll = /opt/niagara/jre/lib/arm/server/libjvm.so
  java> createVM()
  java>   VM options:
  java>     option[0] = "-Djava.library.path=/opt/niagara/bin:"
  java>     option[1] = "-Dniagara.home=/opt/niagara"
  java>     option[2] = "-Dniagara.user.home=/home/niagara"
  java>     option[3] = "-Djava.class.path=/opt/niagara/bin/ext/bcpkix-jdk15on-154.jar:/opt/niagara/bin/ext/bcprov-jdk15on-154.jar:/opt/niagara/bin/ext/encoder-1.1.1.jar:/opt/niagara/bin/ext/javax.servlet-api-3.1.0.jar:/opt/niagara/bin/ext/jetty-all-compact3-9.3.6.v20151106.jar:/opt/niagara/bin/ext/jettyWrapper.jar:/opt/niagara/bin/ext/jxbrowser/runtime.jar:/opt/niagara/bin/ext/niagarad.jar:/opt/niagara/bin/ext/nre.jar:/opt/niagara/bin/ext/org.json-chargebee-1.0.jar:/opt/niagara/bin/ext/tridium-JavaMail-1.5.2.1.jar:/opt/niagara/bin/ext/tridium-activation-1.0.jar"
  java>     option[4] = "-Dniagara.platform.provider=com.tridium.nre.platform.NativePlatformProviderNpsdk"
  java>     option[5] = "-Dniagara.supported.runtime.profiles=rt,ux,wb,doc"
  java>     option[6] = "-Dniagara.required.runtime.profiles=rt"
  java>     option[7] = "-Djava.security.properties==/opt/niagara/security/policy/java.security"
  java>     option[8] = "-Djava.security.manager"
  java>     option[9] = "-Xmx16M"
  java>     option[10] = "-Xms16M"
  java>     option[11] = "-Dniagarad.disableCertGen"
  java>     option[12] = "-Dniagara.security.manager.disable"
  java>     option[13] = "-Dniagara.preferred.network.adapter=eth0"
  java>     option[14] = "-Djava.security.egd=file:/dev/./urandom"
  java>     option[15] = "exit"
  End debug
  java> invokeJava()
  java>   Find main class...
  java>   Find main method...
  java>   Build java arguments...

Same as before, make notes of anything odd.

Now moving on to more functional testing.

Open a Platform Connection to the Niagara Daemon and navigate to the Platform Administration View. Run through the functionality of each command to make sure it is working properly:

  1. "View Details" already confirmed above.

  2. "Update Authentication" already confirmed above.

  3. "System Passphrase"

    Presented with dialog "Set the passphrase used to encrypt sensitive information...."

    Enter the following information:

    Current Passphrase: niagara New Passphrase: Niagara123 Confirm New Passphrase: Niagara123

    Select "OK" -> Was met with exception:

    com.tridium.platform.daemon.DaemonResponseException: Request to platform daemon at 172.16.10.121 failed: SystemPw: Failed to set system password: (java.io.IOException) at com.tridium.platform.daemon.BDaemonSession.handleXMLResponse(BDaemonSession.java:2566) at com.tridium.platform.daemon.BDaemonSession.handleErrorResponses(BDaemonSession.java:2333) at com.tridium.platform.daemon.BDaemonSession.getConnection(BDaemonSession.java:2248) at com.tridium.platform.daemon.BDaemonSession.sendMessage(BDaemonSession.java:1959) at com.tridium.platform.daemon.BDaemonSession.sendMessage(BDaemonSession.java:1596) at com.tridium.platDaemon.ui.config.SystemPasswordPrompt.updateSettings(SystemPasswordPrompt.java:142) at com.tridium.platDaemon.ui.config.BPlatformAdministration$UpdateSystemPasswordCommand.doInvoke(BPlatformAdministration.java:1799) at javax.baja.ui.Command.doInvoke(Command.java:311) at javax.baja.ui.Command.invoke(Command.java:281) at javax.baja.ui.BButton.doInvokeAction(BButton.java:149) at javax.baja.ui.BAbstractButton.mouseReleased(BAbstractButton.java:554) at javax.baja.ui.BWidget.fireMouseEvent(BWidget.java:1239) at com.tridium.ui.awt.MouseManager.fire(MouseManager.java:309) at com.tridium.ui.awt.MouseManager.fire(MouseManager.java:283) at com.tridium.ui.awt.MouseManager.released(MouseManager.java:119) at com.tridium.ui.awt.MouseManager.process(MouseManager.java:92) at com.tridium.ui.awt.AwtShellManager.processMouseEvent(AwtShellManager.java:487) at com.tridium.ui.swing.BSwingWidget$GlassMouseListener.redispatchMouseEvent(BSwingWidget.java:597)

    Determined that this was a result of the /etc/niagara directory contents being owned by root:root; updated this to niagara:niagara.

    Retrying...

    Current Passphrase: niagara New Passphrase: Niagara123 Confirm New Passphrase: Niagara123

    Select "OK" -> "Password change successful".

    Select "System Passphrase" again.

    Enter the following information:

    Current Passphrase: Niagara123 New Passphrase: Niagara234 Confirm New Passphrase: Niagara234

    Select "OK" -> "Password change successful". (As expected)

    Select "System Passphrase" again.

    Enter the following (incorrect) information:

    Current Passphrase: Niagara123 New Passphrase: Niagara123 Confirm New Passphrase: Niagara123

    Select "OK" -> "Incorrect current passphrase". (As expected)

    "System Passphrase" appears correct.

  4. "Change HTTP Port"

    Dialog pops up ("Enter the new HTTP port on which the platform daemon...."), currently seeded with the value "3011"

    Enter the new value "3012", select "OK".

    Platform will re-connect, re-enter the username and password for platform ("three2/Niagara123"). Re-connect successful.

    Re-select "Change HTTP Port", chang e "3012" value back to "3011" and select "OK".

    "Change HTTP Port" appears correct.

  5. "Check TLS Settings"

    Dialog pops up ("Platform TLS Settings"), current values are:

    State "Enabled" Port "5011" Certificate "tridium" Protocol "TLSv1.0+"

    Change the value of the "Port" to "5012", select "Save"

    Platform will re-connect, re-enter the username and password for platform ("three2/Niagara123"). Re-connect successful.

    Now attempt to login to TLS port (5012) with "three2/Niagara123" -> Connection was successful. Disconnect from TLS in nav tree (Right click TLS node -> Disconnect).

    Navigate back to "Platform Administration" on 3011 port. Select "Change TLS Settings".

    Change "Port" from "5012" back to "5011", select "Save".

    Platform will re-connect, re-enter the username and password for platform ("three2/Niagara123"). Re-connect successful.

    Navigate back to "Platform Administration" on 3011 port. Select "Change TLS Settings".

    Change "Protocol" from "TLSv1.0+" to "TLSv1.2", select "Save".

    Platform will re-connect, re-enter the username and password for platform ("three2/Niagara123"). Re-connect successful.

    Navigate back to "Platform Administration" on 3011 port. Select "Change TLS Settings".

    Change "Protocol" from "TLSv1.2" back to "TLSv1.0+", select "Save".

    Platform will re-connect, re-enter the username and password for platform ("three2/Niagara123"). Re-connect successful.

    "Change TLS Settings" appears successful.

  6. "Change Date/Time"

    From Platform Administration View, select "Change Date/Time".

    Dialog pops up ("Set System Date/Time")

    Current values are:

    Date 06-Sep-2017 Time 12:24 Time Zone America/New_York(-6/-5)

    Select action "Use Local".

    Values update to:

    Date 06-Sep-2017 Time 12:24 Time Zone America/New_York(-5/-4)

    Select action "Save".

    No error is displayed; however, Platform Administration and Change Data/Time still show:

    Date 06-Sep-2017 Time 11:24 Central Daylight Time Time Zone America/New_York(-6/-5)

    The date command:

    root@localhost:~# date Wed Sep 6 11:25:55 EDT 2017

    Appears to confirm that the time remains the same. However, changing the time to:

    Date 09-Sep-2017 Time 16:28 Time Zone America/New_York(-5/-4)

    Does appear to update, and date now shows:

    root@localhost:~# date Sat Sep 9 16:28:54 EDT 2017

    I suspect that the Time Zone is not being applied correctly (11:24 EDT == 12:24 EDT) so it may explain why the time did not appear to update.

    "Change Date/Time" does not function correctly and must be addressed.

  7. "Advanced Options"

Dialog is presented ("Advanced Platform Options"). A single check "Daemon Debug Enabled" is present.

Check the box for "Daemon Debug Enabled" -> Hit "OK".

Platform Administration View refreshes and a yellow box "WARNING: Platform debugging enabled" as expected.

Select the "Advanced Options" button once again.

The dialog pops up again with the "Daemon Debug Enabled" box already checked -- uncheck box and select "Ok".

Platform Administration View refreshes and the yellow box "WARNING:..." is no longer displayed as expected.

"Advanced Options" appears to be functioning as expected.

  1. "Change Output Settings"

A dialog is created ("Daemon Output Settings") with the following values:

Log Filter Setting niagarad message webserver message stationRegistry message logfilter message updatedaemon message file message reboot message acctmgt message crypto message

Modify the drop down value for each item to read "error", select "OK". No errors occur during this process as expected.

Select the "Change Output Settings" button again.

Modify the drop down value for each item back to "trace", select "OK". No errors occur during this process as expected.

"Change Output Settings" appears to be functioning as expected.

  1. "View Daemon Output"

    WARNING [11:16:17 06-Sep-2017] [tid = 1] A request was made to run in Security Manager developer mode, but the system is not licensed for it. MESSAGE [11:16:50 06-Sep-2017] [tid = 1] niagarad: starting, niagara_user_home=/home/niagara MESSAGE [11:16:54 06-Sep-2017] [tid = 1] webserver: web server threads started [threadCount = 3] MESSAGE [11:16:54 06-Sep-2017] [tid = 1] app registry: station registry starting MESSAGE [11:19:21 06-Sep-2017] [tid = 25] webserver: web server threads started [threadCount = 3] MESSAGE [11:19:34 06-Sep-2017] [tid = 37] webserver: web server threads started [threadCount = 3] MESSAGE [11:20:42 06-Sep-2017] [tid = 49] webserver: web server threads started [threadCount = 3] MESSAGE [11:21:47 06-Sep-2017] [tid = 62] webserver: web server threads started [threadCount = 3] MESSAGE [11:22:09 06-Sep-2017] [tid = 74] webserver: web server threads started [threadCount = 3] MESSAGE [11:22:27 06-Sep-2017] [tid = 86] webserver: web server threads started [threadCount = 3] MESSAGE [16:38:49 09-Sep-2017] [tid = 107] logfilter: set "webserver" log to LOG_ERROR MESSAGE [16:38:53 09-Sep-2017] [tid = 113] logfilter: set "webserver" log to LOG_MESSAGE

    Select "Close", no errors observed.

    "View Daemon Output" appears to be functioning as expected.

  2. "Configure Runtime Profiles"

    A dialog is created ("Update Enabled Runtime Profiles"). The following values are present:

    Please choose which runtime profiles are to be enabled on this host:

    X RUNTIME: Module JARs having core runtime Java classes only, no user interface. UX: Module JARs having lightweight HTML5+JavaScript+CSS user interface only. WB: Module JARs having Workbench or Workbench Applet user interface classes. SE: Module JARs having Java classes that use the full Java 8 Standard (SE) platform API DOC: Module JARs having no Java classes.

    All but RUNTIME/SE items are available for selection, with "RUNTIME" selected. Notice that the since all items but RUNTIME/SE can be checked, it implies that the return value for the IPlatformProvider methods:

    String getSupportedRuntimeProfiles(); String getRequiredRuntimeProfiles();

    Are:

    "runtime,ux,wb,doc" "runtime"

    respectively. We don't typically install doc on embedded devices, but there is no reason why the NPSDK implementation could not include it.

    Select all boxes possible ("UX|WB|DOC") and select "Next"

    A wizard ("Update Enabled Runtime Profiles") will proceed with the following output:

    Making the changes... Transferring files... Sending !modules/chart-rt.jar Sending !modules/platSerialNpsdk-rt.jar Sending !modules/entityIo-rt.jar Sending !modules/nsh-wb.jar Sending !modules/platSerial-rt.jar Sending !modules/serial-rt.jar Sending !modules/bajaux-rt.jar Sending !modules/platMstp-rt.jar Sending !modules/webChart-rt.jar Sending !modules/html-wb.jar Sending !modules/fonts-rt.jar Sending !modules/jxBrowser-wb.jar Sending !modules/search-rt.jar Sending !modules/history-ux.jar Sending !modules/query-rt.jar Sending !modules/jetty-rt.jar Sending !modules/template-rt.jar Sending !modules/net-rt.jar Sending !modules/bql-ux.jar Sending !modules/neql-rt.jar Sending !modules/control-rt.jar Sending !modules/alarm-ux.jar Sending !modules/bajaux-ux.jar Sending !modules/file-rt.jar Sending !modules/pdf-wb.jar Sending !modules/schedule-rt.jar Sending !modules/kitPx-wb.jar Sending !modules/platCrypto-rt.jar Sending !modules/converters-rt.jar Sending !modules/gx-rt.jar Sending !modules/platCrypto-wb.jar Sending !modules/box-rt.jar Sending !modules/chart-wb.jar Sending !modules/wiresheet-wb.jar Sending !modules/webChart-ux.jar Sending !modules/bql-rt.jar Sending !modules/history-wb.jar Sending !modules/alarm-rt.jar Sending !modules/fox-rt.jar Sending !modules/bajaScript-ux.jar Sending !modules/wbutil-wb.jar Sending !modules/hx-wb.jar Sending !modules/history-rt.jar Sending !modules/alarm-wb.jar Sending !modules/platform-wb.jar Sending !modules/web-rt.jar Sending !modules/webEditors-ux.jar Sending !modules/icons-ux.jar Sending !modules/gx-wb.jar Sending !modules/themeZebra-ux.jar Sending !modules/platform-rt.jar Sending !modules/bajaui-wb.jar Sending !modules/js-ux.jar Sending !modules/baja.jar Sending !modules/workbench-wb.jar FileStore::commit Wrote "/opt/niagara/modules/chart-rt.jar". Wrote "/opt/niagara/modules/platSerialNpsdk-rt.jar". Wrote "/opt/niagara/modules/entityIo-rt.jar". Wrote "/opt/niagara/modules/nsh-wb.jar". Wrote "/opt/niagara/modules/platSerial-rt.jar". Wrote "/opt/niagara/modules/serial-rt.jar". Wrote "/opt/niagara/modules/bajaux-rt.jar". Wrote "/opt/niagara/modules/platMstp-rt.jar". Wrote "/opt/niagara/modules/webChart-rt.jar". Wrote "/opt/niagara/modules/html-wb.jar". Wrote "/opt/niagara/modules/fonts-rt.jar". Wrote "/opt/niagara/modules/jxBrowser-wb.jar". Wrote "/opt/niagara/modules/search-rt.jar". Wrote "/opt/niagara/modules/history-ux.jar". Wrote "/opt/niagara/modules/query-rt.jar". Wrote "/opt/niagara/modules/jetty-rt.jar". Wrote "/opt/niagara/modules/template-rt.jar". Wrote "/opt/niagara/modules/net-rt.jar". Wrote "/opt/niagara/modules/bql-ux.jar". Wrote "/opt/niagara/modules/neql-rt.jar". Wrote "/opt/niagara/modules/control-rt.jar". Wrote "/opt/niagara/modules/alarm-ux.jar". Wrote "/opt/niagara/modules/bajaux-ux.jar". Wrote "/opt/niagara/modules/file-rt.jar". Wrote "/opt/niagara/modules/pdf-wb.jar". Wrote "/opt/niagara/modules/schedule-rt.jar". Wrote "/opt/niagara/modules/kitPx-wb.jar". Wrote "/opt/niagara/modules/platCrypto-rt.jar". Wrote "/opt/niagara/modules/converters-rt.jar". Wrote "/opt/niagara/modules/gx-rt.jar". Wrote "/opt/niagara/modules/platCrypto-wb.jar". Wrote "/opt/niagara/modules/box-rt.jar". Wrote "/opt/niagara/modules/chart-wb.jar". Wrote "/opt/niagara/modules/wiresheet-wb.jar". Wrote "/opt/niagara/modules/webChart-ux.jar". Wrote "/opt/niagara/modules/bql-rt.jar". Wrote "/opt/niagara/modules/history-wb.jar". Wrote "/opt/niagara/modules/alarm-rt.jar". Wrote "/opt/niagara/modules/fox-rt.jar". Wrote "/opt/niagara/modules/bajaScript-ux.jar". Wrote "/opt/niagara/modules/wbutil-wb.jar". Wrote "/opt/niagara/modules/hx-wb.jar". Wrote "/opt/niagara/modules/history-rt.jar". Wrote "/opt/niagara/modules/alarm-wb.jar". Wrote "/opt/niagara/modules/platform-wb.jar". Wrote "/opt/niagara/modules/web-rt.jar". Wrote "/opt/niagara/modules/webEditors-ux.jar". Wrote "/opt/niagara/modules/icons-ux.jar". Wrote "/opt/niagara/modules/gx-wb.jar". Wrote "/opt/niagara/modules/themeZebra-ux.jar". Wrote "/opt/niagara/modules/platform-rt.jar". Wrote "/opt/niagara/modules/bajaui-wb.jar". Wrote "/opt/niagara/modules/js-ux.jar". Wrote "/opt/niagara/modules/baja.jar". Wrote "/opt/niagara/modules/workbench-wb.jar". FileStore::commitInstance commit complete Filter level change completed successfully.

    This is as expected, select "Close".

    The Platform Administration View will refresh, select "Configure Runtime Profiles" again.

    The dialog is created again ("Update Enabled Runtime Profiles"), verified that the checkboxes are all now selected from previous step.

    Uncheck all boxes possible (UX|WB|SE|DOC) (note that UX and WB are linked as expected) and select "Next".

    Validated that wizard proceeded with the following output:

    Making the changes... Updating enabled runtime profiles to "rt" Transferring files... Deleting !modules/workbench-wb.jar Deleting !modules/js-ux.jar Deleting !modules/bajaui-wb.jar Deleting !modules/themeZebra-ux.jar Deleting !modules/gx-wb.jar Deleting !modules/icons-ux.jar Deleting !modules/webEditors-ux.jar Deleting !modules/platform-wb.jar Deleting !modules/alarm-wb.jar Deleting !modules/hx-wb.jar Deleting !modules/wbutil-wb.jar Deleting !modules/bajaScript-ux.jar Deleting !modules/history-wb.jar Deleting !modules/webChart-ux.jar Deleting !modules/wiresheet-wb.jar Deleting !modules/chart-wb.jar Deleting !modules/platCrypto-wb.jar Deleting !modules/kitPx-wb.jar Deleting !modules/pdf-wb.jar Deleting !modules/bajaux-ux.jar Deleting !modules/alarm-ux.jar Deleting !modules/bql-ux.jar Deleting !modules/history-ux.jar Deleting !modules/jxBrowser-wb.jar Deleting !modules/html-wb.jar Deleting !modules/nsh-wb.jar FileStore::commit Deleted "/opt/niagara/modules/workbench-wb.jar". Deleted "/opt/niagara/modules/js-ux.jar". Deleted "/opt/niagara/modules/bajaui-wb.jar". Deleted "/opt/niagara/modules/themeZebra-ux.jar". Deleted "/opt/niagara/modules/gx-wb.jar". Deleted "/opt/niagara/modules/icons-ux.jar". Deleted "/opt/niagara/modules/webEditors-ux.jar". Deleted "/opt/niagara/modules/platform-wb.jar". Deleted "/opt/niagara/modules/alarm-wb.jar". Deleted "/opt/niagara/modules/hx-wb.jar". Deleted "/opt/niagara/modules/wbutil-wb.jar". Deleted "/opt/niagara/modules/bajaScript-ux.jar". Deleted "/opt/niagara/modules/history-wb.jar". Deleted "/opt/niagara/modules/webChart-ux.jar". Deleted "/opt/niagara/modules/wiresheet-wb.jar". Deleted "/opt/niagara/modules/chart-wb.jar". Deleted "/opt/niagara/modules/platCrypto-wb.jar". Deleted "/opt/niagara/modules/kitPx-wb.jar". Deleted "/opt/niagara/modules/pdf-wb.jar". Deleted "/opt/niagara/modules/bajaux-ux.jar". Deleted "/opt/niagara/modules/alarm-ux.jar". Deleted "/opt/niagara/modules/bql-ux.jar". Deleted "/opt/niagara/modules/history-ux.jar". Deleted "/opt/niagara/modules/jxBrowser-wb.jar". Deleted "/opt/niagara/modules/html-wb.jar". Deleted "/opt/niagara/modules/nsh-wb.jar". FileStore::commitInstance commit complete Filter level change completed successfully.

    Hit "Close"

    Platform Administration View will refresh, select "Configure Runtime Profiles".

    Verified that all checkboxes now are unselected from previous step as expected.

    "Configure Runtime Profiles" appears to be functioning as expected.

  3. "Backup"

    From the Platform Administration View, select the button "Backup".

    A File Chooser dialog will be created, the platform will be backed up to a file called "backup_172.16.10.121_170906_1308.dist". Save this to ~backups.

       Backup succeeded with the following output:
    
       Status Timestamp Message Details
       Message 06-Sep-17 1:08 PM EDT Backup starting...
       Success 06-Sep-17 1:09 PM EDT Analyzing modules
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/defaults/bacnetObjectTypes.xml
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/defaults/colorCoding.properties
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/defaults/lonStandardConversion.xml
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/defaults/migrator.properties
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/defaults/niagaraAxBacnetObjectTypes.xml
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/defaults/system.properties
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/defaults/unitConversion.xml
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/defaults/unitDifferentialConversion.xml
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/defaults/units.xml
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/lib/licenseAgreement.txt
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/lib/readmeLicenses.txt
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/etc/extensions.properties
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/security/certificates/Tridium.certificate
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/security/licenses/Tridium.license
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/security/licenses/db/TRID-EVAL-1000-1234-1234/Tridium.license
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/security/policy/java.policy
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/security/policy/java.security
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_home/security/policy/signing.properties
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_user_home/daemon/daemon.properties
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_user_home/daemon/daemon.properties.default
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_user_home/daemon/daemonlog.properties
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_user_home/etc/nre.properties
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_user_home/logging/logging.properties
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_user_home/security/.kr
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_user_home/security/cacerts.jceks
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_user_home/security/exemptions.tes
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_user_home/security/keystore.jceks
       Success 06-Sep-17 1:09 PM EDT Writing : niagara_user_home/security/untrusted.jceks
       Success 06-Sep-17 1:09 PM EDT Adding distribution manifest
       Success 06-Sep-17 1:09 PM EDT Backup successful
       Success 06-Sep-17 1:09 PM EDT Job Success                                                           

    Now, with backup having been created, navigate to the "Distribution File Installer" available under the "Platform" node in the nav tree.

    Select the "Backups" button at the bottom of the view.

    Locate the backup distribution we just created, having the name "backup_172.16.10.121_170906_1308.dist" with description "Offline backup of host '172.16.10.121'".

    Select that backup and select "Install" at the bottom of the view.

    A dialog will be created with the output:

     Updating enabled runtime profiles to "rt"
     Checking file /niagara/defaults/bacnetObjectTypes.xml
     Checking file /niagara/defaults/colorCoding.properties
     Checking file /niagara/defaults/lonStandardConversion.xml
     Checking file /niagara/defaults/migrator.properties
     Checking file /niagara/defaults/niagaraAxBacnetObjectTypes.xml
     Checking file /niagara/defaults/system.properties
     Checking file /niagara/defaults/unitConversion.xml
     Checking file /niagara/defaults/unitDifferentialConversion.xml
     Checking file /niagara/defaults/units.xml
     Checking file /niagara/etc/extensions.properties
     Checking file /niagara/lib/licenseAgreement.txt
     Checking file /niagara/lib/readmeLicenses.txt
     Checking file /niagara/security/certificates/Tridium.certificate
     Checking file /niagara/security/licenses/Tridium.license
     Checking file /niagara/security/licenses/db/TRID-EVAL-1000-1234-1234/Tridium.license
     Checking file /niagara/security/policy/java.policy
     Checking file /niagara/security/policy/java.security
     Checking file /niagara/security/policy/signing.properties
     Checking file /niagara_user/daemon/daemon.properties
     Checking file /niagara_user/daemon/daemon.properties.default
     Checking file /niagara_user/daemon/daemonlog.properties
     Checking file /niagara_user/etc/nre.properties
     Checking file /niagara_user/logging/logging.properties
     Checking file /niagara_user/security/.kr
     Checking file /niagara_user/security/cacerts.jceks
     Checking file /niagara_user/security/exemptions.tes
     Checking file /niagara_user/security/keystore.jceks
     Checking file /niagara_user/security/untrusted.jceks
     Checking directories to be cleaned
     Transferring files...
     Deleting /niagara/defaults/platform.bog
     Deleting /niagara/defaults/platform_backup_170830_1446.bog
     Deleting /niagara_user/stations
     Sending !defaults/platform.bog
     Sending /niagara_user/security/.kr
     Sending /niagara_user/daemon/daemon.properties
     FileStore::commit
     Deleted "/opt/niagara/defaults/platform.bog".
     Deleted "/opt/niagara/defaults/platform_backup_170830_1446.bog".
     Deleted "/home/niagara/stations".
     Wrote "/opt/niagara/defaults/platform.bog".
     KeyRingImportFileStoreElement::commit imported data to keyring in /home/niagara/security/.kr
     Wrote "/home/niagara/daemon/daemon.properties".
     FileStore::commitInstance commit complete
     Installation complete.
     

    "Backup" appears to be successful.

  4. "Commissioning"

    From the Platform Administration View, select "Commissioning" button.

    The Commissioning Wizard will start.

    Select the following options:

    "Request or install software licenses" "Set enabled runtime profiles" "Install a station from the local computer" "Install/upgrade modules" "Install/upgrade core software from distribution files" "Sync with my local system date and time" "Configure TCP/IP network settings" "Configure system passphrase" "Configure platform daemon authentication"

    Now select "Next" to move to "License Step".

    The available licenses are:

    "Tridium.license (Tridium 4.3 - expires 2017-10-20)"

    Selected the option to use these licenses.

    Now select "Next" to move to "Enabled Runtime Profiles" step.

    Select all checkboxes (RUNTIME | UX | WB | DOC)

    Select "Next" to "Station Installation".

    Select newly created, empty Station "npsdk" from drop down (Create this station using "Tools -> New Station Wizard" if not available locally).

    New Name "npsdk"

    Check "Start After Install" and "Auto-Start".

    Now select "Next" to move to "Software Installation" step.

    The Software column checkboxes should all be auto-checked based on the type dependencies in the "npsdk" station config.bog, proceed with the default selection.

    Now select "Next" to the "Distribution File Installation" step.

    (NOTE: Did the NPSDK customer provide distribution files? If they aren't found - make a note)

    Acknowledge that no items will be installed and select "Next" to "TCP/IP" step.

    Use the existing settings (make no changes) and select "Next" to "System Passphrase" step.

    NOTE: Current system passphrase is "Niagara234".

    Enter the following at this step:

    Current Passphrase "Niagara234" New Passphrase "Niagara123" Confirm New Passphrase "Niagara123"

    Now select "Next" to move to the "Platform Daemon Authentication" step.

    Change the user/password from "three2/Niagara123" to "admin/Niagara234"

    Select "Next" to move to "Review of changes step".

    Confirm that review contains all of the changes that we selected during this process.

    Now select "Finish" to complete Commissioning Wizard.

    Output was:

    Stopping applications... No running applications to stop. Updating daemon authentication Updating system passphrase... Updating enabled runtime profiles to "rt,ux,wb,doc" Transferring files... Sending !security/licenses/Tridium.license Sending !security/licenses/Tridium.license Sending ~stations/npsdk/config.bog Sending !modules/app-wb.jar Sending !modules/hierarchy-ux.jar Sending !modules/search-wb.jar Sending !modules/hierarchy-wb.jar Sending !modules/niagaraVirtual-wb.jar Sending !modules/app-rt.jar Sending !modules/nsh-wb.jar Sending !modules/backup-wb.jar Sending !modules/control-wb.jar Sending !modules/tagdictionary-wb.jar Sending !modules/html-wb.jar Sending !modules/driver-ux.jar Sending !modules/jxBrowser-wb.jar Sending !modules/history-ux.jar Sending !modules/backup-rt.jar Sending !modules/search-ux.jar Sending !modules/bql-ux.jar Sending !modules/program-rt.jar Sending !modules/hierarchy-rt.jar Sending !modules/alarm-ux.jar Sending !modules/bajaux-ux.jar Sending !modules/pdf-wb.jar Sending !modules/driver-wb.jar Sending !modules/tagdictionary-rt.jar Sending !modules/kitPx-wb.jar Sending !modules/niagaraVirtual-rt.jar Sending !modules/queryTable-wb.jar Sending !modules/platCrypto-wb.jar Sending !modules/niagaraDriver-wb.jar Sending !modules/driver-rt.jar Sending !modules/chart-wb.jar Sending !modules/wiresheet-wb.jar Sending !modules/webChart-ux.jar Sending !modules/program-wb.jar Sending !modules/schedule-wb.jar Sending !modules/smartTableHx-wb.jar Sending !modules/history-wb.jar Sending !modules/template-wb.jar Sending !modules/niagaraDriver-rt.jar Sending !modules/bajaScript-ux.jar Sending !modules/wbutil-wb.jar Sending !modules/hx-wb.jar Sending !modules/alarm-wb.jar Sending !modules/platform-wb.jar Sending !modules/webEditors-ux.jar Sending !modules/pxEditor-wb.jar Sending !modules/icons-ux.jar Sending !modules/gx-wb.jar Sending !modules/themeZebra-ux.jar Sending !modules/bajaui-wb.jar Sending !modules/js-ux.jar Sending !modules/workbench-wb.jar FileStore::commit Wrote "/opt/niagara/security/licenses/Tridium.license". Wrote "/opt/niagara/security/licenses/Tridium.license". Wrote "/home/niagara/stations/npsdk/config.bog". Wrote "/opt/niagara/modules/app-wb.jar". Wrote "/opt/niagara/modules/hierarchy-ux.jar". Wrote "/opt/niagara/modules/search-wb.jar". Wrote "/opt/niagara/modules/hierarchy-wb.jar". Wrote "/opt/niagara/modules/niagaraVirtual-wb.jar". Wrote "/opt/niagara/modules/app-rt.jar". Wrote "/opt/niagara/modules/nsh-wb.jar". Wrote "/opt/niagara/modules/backup-wb.jar". Wrote "/opt/niagara/modules/control-wb.jar". Wrote "/opt/niagara/modules/tagdictionary-wb.jar". Wrote "/opt/niagara/modules/html-wb.jar". Wrote "/opt/niagara/modules/driver-ux.jar". Wrote "/opt/niagara/modules/jxBrowser-wb.jar". Wrote "/opt/niagara/modules/history-ux.jar". Wrote "/opt/niagara/modules/backup-rt.jar". Wrote "/opt/niagara/modules/search-ux.jar". Wrote "/opt/niagara/modules/bql-ux.jar". Wrote "/opt/niagara/modules/program-rt.jar". Wrote "/opt/niagara/modules/hierarchy-rt.jar". Wrote "/opt/niagara/modules/alarm-ux.jar". Wrote "/opt/niagara/modules/bajaux-ux.jar". Wrote "/opt/niagara/modules/pdf-wb.jar". Wrote "/opt/niagara/modules/driver-wb.jar". Wrote "/opt/niagara/modules/tagdictionary-rt.jar". Wrote "/opt/niagara/modules/kitPx-wb.jar". Wrote "/opt/niagara/modules/niagaraVirtual-rt.jar". Wrote "/opt/niagara/modules/queryTable-wb.jar". Wrote "/opt/niagara/modules/platCrypto-wb.jar". Wrote "/opt/niagara/modules/niagaraDriver-wb.jar". Wrote "/opt/niagara/modules/driver-rt.jar". Wrote "/opt/niagara/modules/chart-wb.jar". Wrote "/opt/niagara/modules/wiresheet-wb.jar". Wrote "/opt/niagara/modules/webChart-ux.jar". Wrote "/opt/niagara/modules/program-wb.jar". Wrote "/opt/niagara/modules/schedule-wb.jar". Wrote "/opt/niagara/modules/smartTableHx-wb.jar". Wrote "/opt/niagara/modules/history-wb.jar". Wrote "/opt/niagara/modules/template-wb.jar". Wrote "/opt/niagara/modules/niagaraDriver-rt.jar". Wrote "/opt/niagara/modules/bajaScript-ux.jar". Wrote "/opt/niagara/modules/wbutil-wb.jar". Wrote "/opt/niagara/modules/hx-wb.jar". Wrote "/opt/niagara/modules/alarm-wb.jar". Wrote "/opt/niagara/modules/platform-wb.jar". Wrote "/opt/niagara/modules/webEditors-ux.jar". Wrote "/opt/niagara/modules/pxEditor-wb.jar". Wrote "/opt/niagara/modules/icons-ux.jar". Wrote "/opt/niagara/modules/gx-wb.jar". Wrote "/opt/niagara/modules/themeZebra-ux.jar". Wrote "/opt/niagara/modules/bajaui-wb.jar". Wrote "/opt/niagara/modules/js-ux.jar". Wrote "/opt/niagara/modules/workbench-wb.jar". FileStore::commitInstance commit complete Starting applications... station npsdk starting. Commissioning complete.

    "Commissioning Wizard" completed normally.

11 ) "Reboot"

From Platform Administration, select the button "Reboot".

You will be prompted with a dialog "System Reboot". Select "No". Return to Platform Administration as expected.

Select "Reboot", select "Yes" in dialog.

The dialog "The remote computer at 172.16.10.114 is now rebooting" appears, select "OK".

The active view (Platform Administration) will disconnect with message "Session disconnected."

Output in the SSH terminal shows:

    root@localhost:/opt/niagara/defaults#
    Broadcast message from root@localhost (Wed Sep  6 12:24:53 2017):

    The system is going down for reboot NOW!

I was able to reconnect once the reboot completed, "reboot" appears to be completed successfully.    

All Platform Administration functionality now tested, moving on to testing each view beneath "Platform" node in nav tree.

  1. "Application Director"

    Station "npsdk" is currently running:

    root@ci534:/opt/niagara# ps -ef | grep station | grep -v grep niagara 1410 874 48 11:11 ? 00:01:07 /opt/niagara/bin/station npsdk -daemonspawn:b7e793177d46ce124f4607e509e28505ea1305c20974ab3cca1a0d5aa3c3f503b808fc84437169abc38952fd98d46ed4ee96c19d66a16833ac61305da738d2c72f3374721056adfa97bad7bbe1dcab62:442fd9843be15dccf7e5e2f495789928 -rp:rt,ux,doc,wb

    Single station "npsdk" is installed, both "Auto-Start" and "Restart on Failure" are selected (installed from Commissioning Wizard above).

    Toggle "Auto-Start" from "on" to "off". No error seen.

    Refresh "Application Director" view, "Auto-Start" is still "off" (as expected).

    Toggle "Auto-Start" from "off" to "on". No error seen.

    Refresh "Application Director" view, "Auto-Start" is still "on" (as expected).

    Toggle "Restart on Failure" from "on" to "off". No error seen.

    Refresh "Application Director" view, "Restart on Failure" is still "off" (as expected).

    Toggle "Restart on Failure" from "off" to "on". No error seen.

    Refresh "Application Director" view, "Restart on Failure" is still "on" (as expected).

    Application Director output contains Station output as expected.

    The Station "npsdk" is currently in "Running" status with output:

    INFO [nre] Launching Niagara Runtime Environment INFO [12:36:24 06-Sep-17 EDT][nre] Booting INFO [12:36:49 06-Sep-17 EDT][sys] Logging initialized INFO [12:37:19 06-Sep-17 EDT][sys.registry] Up-to-date [455ms] INFO [12:37:20 06-Sep-17 EDT][sys.registry] Loaded [1090ms] INFO [12:37:33 06-Sep-17 EDT][sys] Niagara runtime booted ("/opt/niagara") on TRID-EVAL-1000-1234-1234 (71515ms) INFO [12:37:33 06-Sep-17 EDT][sys] Loading "/home/niagara/stations/npsdk/config.bog"... INFO [12:37:56 06-Sep-17 EDT][sys] Loaded (22520ms) INFO [12:38:12 06-Sep-17 EDT][alarm.database] Loading... INFO [12:38:12 06-Sep-17 EDT][alarm.database] Loaded [0ms, 0 alarms, 0 pages] INFO [12:38:13 06-Sep-17 EDT][sys] Services Initialized (13630ms) INFO [12:38:13 06-Sep-17 EDT][sys.mixin] Updated [70ms] INFO [12:38:15 06-Sep-17 EDT][history.db] Starting async warmup of history config index... INFO [12:38:16 06-Sep-17 EDT][history.db] Async history config index warmup completed in 1180 ms. INFO [12:38:17 06-Sep-17 EDT][tagdictionary] Niagara tagdictionary is out of date or has been modified. INFO [12:38:17 06-Sep-17 EDT][tagdictionary] Niagara tagdictionary has been reloaded. INFO [12:38:17 06-Sep-17 EDT][sys.mixin] Updated [10ms] INFO [12:38:29 06-Sep-17 EDT][web] Jetty web server started on HTTPS port 8443 INFO [12:38:29 06-Sep-17 EDT][fox] FOXS server started on port [4911] INFO [12:38:31 06-Sep-17 EDT][sys] Niagara Runtime Environment: 4.2.36.38 INFO [12:38:31 06-Sep-17 EDT][sys] *** Station Started (18200ms) [129723ms total] *** niagara>

    Hit the "Stop" button to verify that Station stops -> "Do you wish to stop station npsdk" -> "Yes", output:

    niagara>INFO [12:40:20 06-Sep-17 EDT][console] Quit INFO [12:40:20 06-Sep-17 EDT][sys] Saving station... INFO [12:40:24 06-Sep-17 EDT][sys] Saved /home/niagara/stations/npsdk/config.bog (3270ms) INFO [12:40:24 06-Sep-17 EDT][sys] Station stopped INFO [12:40:24 06-Sep-17 EDT][web] Jetty stopped. INFO [12:40:26 06-Sep-17 EDT][fox] Service stopped INFO [12:40:26 06-Sep-17 EDT][fox] FOXS server stopped on port [4911] INFO [12:40:26 06-Sep-17 EDT][sys] Services stopped INFO [12:40:26 06-Sep-17 EDT][sys] *** Station shutdown ***

    Hit the "Start" button to verify that Station starts. Station started as expected.

    Hit "Restart" button to verify that Station stop/starts. "Do you wish to restart station npsdk" -> "Yes". Station re-started as expected.

    NOTE: Reboot behavior confirmed in "Platform Administration"

    Hit "Kill" button to verify Station exits quickly. "Do you wish to kill station npsdk?" -> "Yes".

    Output:

    App Failed

    Use SSH terminal to verify that "station" process is now gone:

    root@localhost:/opt/niagara# ps -ef | grep station root 1530 1120 0 12:50 pts/0 00:00:00 grep station

    Station is no longer in process table as expected.

    Hit the "Start" button to verify that Station starts. Station started as expected.

    Hit the "Dump Threads" button to verify that threads are printed to output.

    Sample output:

     Full thread dump Java HotSpot(TM) Server VM (25.101-b13 mixed mode):
    
     "DestroyJavaVM" #43 prio=5 os_prio=0 tid=0x01edda18 nid=0x607 waiting on condition [0x00000000]
        java.lang.Thread.State: RUNNABLE
    
     "Plat:EngineMonitor" #42 prio=5 os_prio=0 tid=0x01fb2e68 nid=0x65c waiting on condition [0xa959e000]
        java.lang.Thread.State: TIMED_WAITING (sleeping)
      at java.lang.Thread.sleep(Native Method)
      at com.tridium.platform.BSystemPlatformService$EngineMonitor.run(BSystemPlatformService.java:2279)
      at java.lang.Thread.run(Thread.java:745)
    
     "Nre:Metrics.Recount" #14 daemon prio=4 os_prio=0 tid=0x02438500 nid=0x65a waiting on condition [0xa963e000]
        java.lang.Thread.State: TIMED_WAITING (sleeping)
      at java.lang.Thread.sleep(Native Method)
      at com.tridium.sys.metrics.Metrics$Recount.run(Metrics.java:616)
    
     "Nre:ResourceManager" #13 daemon prio=4 os_prio=0 tid=0x02385ff8 nid=0x659 waiting on condition [0xa968e000]
        java.lang.Thread.State: TIMED_WAITING (sleeping)
      at java.lang.Thread.sleep(Native Method)
      at com.tridium.sys.resource.ResourceManager.run(ResourceManager.java:217)
    
     "Nre:Station" #12 prio=5 os_prio=0 tid=0x02385080 nid=0x658 waiting on condition [0xa96de000]
        java.lang.Thread.State: TIMED_WAITING (sleeping)
      at java.lang.Thread.sleep(Native Method)
      at com.tridium.sys.station.StationManager.run(StationManager.java:58)
    
     "Ping:NiagaraNetwork" #40 prio=5 os_prio=0 tid=0x02383fd8 nid=0x657 waiting on condition [0xa9e67000]
        java.lang.Thread.State: TIMED_WAITING (sleeping)
      at java.lang.Thread.sleep(Native Method)
      at javax.baja.driver.ping.BPingMonitor.run(BPingMonitor.java:322)
      at java.lang.Thread.run(Thread.java:745)
    
     "dpMonitor:TagDictionaryService" #39 prio=5 os_prio=0 tid=0x025f3c70 nid=0x656 waiting on condition [0xa9f07000]
        java.lang.Thread.State: TIMED_WAITING (sleeping)
      at java.lang.Thread.sleep(Native Method)
      at javax.baja.tagdictionary.data.BTagGroupMonitor.run(BTagGroupMonitor.java:742)
      at java.lang.Thread.run(Thread.java:745)
    
     ...

    Threads are dumped as expected.

    Hit "Save Bog" button to verify that the Station is saved.

    niagara>INFO [11:23:05 26-Sep-17 EDT][sys] Saving station... INFO [11:23:07 26-Sep-17 EDT][sys] Saved /home/niagara/stations/npsdk/config.bog (1710ms)

    Station saved as expected.

    Hit "Verify Software" button to verify that currently installed software is verified -> "All software required by station "npsdk" is currently installed" -> "OK".

    Hit "Clear Output" button to verify that output is cleared. Cleared as expected.

    Hit "Pause Output" button to verify that output is paused -> "Load Output". Paused and loaded as expected.

    Hit "Output Dialog" button to verify that output dialog is created -> "Close". Dialog created and closed as expected.

    Hit "Stream to File" button to verify that output can be streamed. "Save Station Output" dialog is created, create local file at desktop. "OK" -> Output is streamed as expected.

    Hit "Output Settings" button to verify that Application Director output settings can be configred.

    Dialog is created:

    Memory Buffer Size (bytes)   65536
    Maximum File Size (byte)     65536

    Modify values to

    Memory Buffer Size (bytes)   65537
    Maximum File Size (byte)     65537

    Hit "OK". Verified no error on "OK".

    Hit "Output Settings" button to verify that previously applied settings were persisted.

    Dialog shows:

    Memory Buffer Size (bytes)   65537
    Maximum File Size (byte)     65537

    Settings saved as expected.

    "Application Director" view appears to be functioning as expected.

  2. "Certificate Management" view.

    Open "Certificate Management" view when connected to the platform via a standard (port 3011) connection.

    Dialog is created:

    "Non-secure Connection"

    "A non-secure connection is being used. Certificates and keys are at risk of being compromised"

    "Do you want to continue?" -> "Yes".

    "Certificate Management" view is loaded as expected.

    Disconnect from platform and open a new connection on the TLS/secure (port 5011) port.

    Open "Certificate Management" view, verified that no dialog ("Non-secure connection.....") is created when opening view across secure connection.

    2a) "User Key Store"

    "Certificate Management" view has "User Key Store" tab active. The default, self-signed Tridium certificate is installed:

     Alias    Issued By  Subject   Not Before                    Not After                     Key Algorithm  Key Size  Signature Algorithm  Signature Size  Valid  Self Signed
     -------  ---------  --------  ----------------------------  ----------------------------  -------------  --------  -------------------  --------------  -----  -----------
     tridium  Niagara4   Niagara4  Fri Aug 25 12:50:01 EDT 2017  Sat Aug 25 12:50:01 EDT 2018  RSA            2048      SHA256WITHRSA        256             true   true       

    Highlight the "tridium" self-signed certificate and select "View".

    "Certificate Info" dialog is created with appropriate information. Hit "OK" to close dialog.

    With no items in "User Key Store" selected, hit "New".

    Dialog created:

    "Stop running station"

    "Platform cannot generate a new certificate while a station is running". -> "OK".

    This dialog is expected when the "-Dniagarad.disableCertGen" property is provided to the Niagara Daemon startup.

    Confirmed with "java_debug=1" that the following option is provided to the Niagara Daemon:

    ... java> option[11] = "-Dniagarad.disableCertGen" ...

    Behavior to disable certificate generation is disabled as expected.

    Navigate back to "Application Director" view and stop the running station "npsdk". Station "npsdk" is now stopped.

    Navigate back to the "Certificate Management" view.

    With no items in the "User Key Store" selected, hit the "New" button.

    The following dialog is created:

    "Generate Self Signed Certificate".

    Enter the following values (or as appropriate for your location):

    Alias                 npsdktest
    Common Name           npsdkTest
    Organizational Unit   Engineering
    Organization          Tridium
    Locality              Richmond
    State/Province        VA
    Country Code          US
    Not Before            (Leave default)
    Not After             (Leave default)
    Key Size              4096 bits
    Certificate Usage     Server
    Alternate Server Name 
    Email Address         foo@tridium.com

    Select "OK" to begin certificate generation.

    Dialog created:

    "Info"
    
    "Certificate Generation has been submitted and will be performed in the background".
    "This may take a while!".

    Hit "OK" to acknowledge.

    Wait for npsdktest to show up in "User Key Store". Certificate shows up after generation complete.

    View certificate in table to verify matches parameters provided:

    Alias Issued By Subject Not Before Not After Key Algorithm Key Size Signature Algorithm Signature Size Valid Self Signed


    npsdktest npsdkTest npsdkTest Wed Sep 06 14:11:14 EDT 2017 Thu Sep 06 14:11:14 EDT 2018 RSA 4096 SHA256WITHRSA 512 true true

    Select "npsdktest" certificate in "User Key Store", hit "Cert Request" button at bottom of pane.

    Dialog created:

    "Certificate Request Info"
    
    ...

    Hit "OK".

    Dialog created:

    "Choose Export Directory"

    Select an appropriate path for "npsdktest.csr" to be exported (I used Desktop). Hit "Save".

    Dialog created:

    "Certificate Signing Request"
    
    "CSR generation complete".

    Hit "OK".

    Select "npsdktest" certificate in "User Key Store", hit "Delete" button at bottom of pane.

    "Delete Certificate(s)"
    
    "Are you sure you want to delete the selected certificate(s)?" -> "Yes"

    Verified that the "npsdktest" self-signed certificate has now been deleted without error.

    NOTICE: The following "Reset" test should only be done across a NON-TLS connection as you will be deleting the certificate currently in use by both the Niagara Daemon and/or the Niagara Station connections. Make sure the Niagara Station is stopped prior to exercising this functionality.

    Across NON-TLS connection, select the self-signed certificate "tridium | Niagara4 | ..." from the "User Key Store" list.

    Hit the "Reset" button to delete and regenerate the default self-signed certificate.

    Dialog created:

    "Reset Keystore"

    "Resetting the keystore will delete all entries and will create a new self signed certificate. Are you sure?" -> "Yes".

    Dialog created:

    "Info"
    
    "Certificate Generation has been submitted and will be performed in the background".
    "This may take a while!".

    Hit "OK" to acknowledge.

    Wait for "tridium" to show up in "User Key Store". Certificate shows up after generation complete. Certificate should match the following:

    Alias Issued By Subject Not Before Not After Key Algorithm Key Size Signature Algorithm Signature Size Valid Self Signed


    tridium Niagara4 Niagara4 Wed Sep 06 14:15:04 EDT 2017 Thu Sep 06 14:15:04 EDT 2018 RSA 2048 SHA256WITHRSA 256 true true

    "User Key Store" appears to be functioning as expected.

    2b) "System Trust Store"

    Select the "System Trust Store" tab to activate this view.

    Verify that the table is populated by items in the installed JRE CA certificates list (90 objects in this case):

    Sample CA certificates:

     Alias                            Issued By                                                     Subject                                                       Not Before                    Not After                     Key Algorithm  Key Size  Signature Algorithm  Signature Size  Valid  Self Signed
     -------------------------------  ------------------------------------------------------------  ------------------------------------------------------------  ----------------------------  ----------------------------  -------------  --------  -------------------  --------------  -----  -----------
     digicertassuredidrootca          DigiCert Assured ID Root CA                                   DigiCert Assured ID Root CA                                   Thu Nov 09 19:00:00 EST 2006  Sun Nov 09 19:00:00 EST 2031  RSA            2048      SHA1WITHRSA          256             true   true       
     comodorsaca                      COMODO RSA Certification Authority                            COMODO RSA Certification Authority                            Mon Jan 18 19:00:00 EST 2010  Mon Jan 18 18:59:59 EST 2038  RSA            4096      SHA384WITHRSA        512             true   true       
     thawtepremiumserverca            Thawte Premium Server CA                                      Thawte Premium Server CA                                      Wed Jul 31 20:00:00 EDT 1996  Fri Jan 01 18:59:59 EST 2021  RSA            1024      SHA1WITHRSA          128             true   true       
     swisssignplatinumg2ca            SwissSign Platinum CA - G2                                    SwissSign Platinum CA - G2                                    Wed Oct 25 04:36:00 EDT 2006  Sat Oct 25 04:36:00 EDT 2036  RSA            4096      SHA1WITHRSA          512             true   true       
     swisssignsilverg2ca              SwissSign Silver CA - G2                                      SwissSign Silver CA - G2                                      Wed Oct 25 04:32:46 EDT 2006  Sat Oct 25 04:32:46 EDT 2036  RSA            4096      SHA1WITHRSA          512             true   true       
     identrustdstx3                   DST Root CA X3                                                DST Root CA X3                                                Sat Sep 30 17:12:19 EDT 2000  Thu Sep 30 10:01:15 EDT 2021  RSA            2048      SHA1WITHRSA          256             true   true       
     equifaxsecureebusinessca1        Equifax Secure eBusiness CA-1                                 Equifax Secure eBusiness CA-1                                 Mon Jun 21 00:00:00 EDT 1999  Mon Jun 22 00:00:00 EDT 2020  RSA            1024      SHA1WITHRSA          128             true   true       
     securetrustca                    SecureTrust CA                                                SecureTrust CA                                                Tue Nov 07 14:31:18 EST 2006  Mon Dec 31 14:40:55 EST 2029  RSA            2048      SHA1WITHRSA          256             true   true       
     digicertassuredidg3              DigiCert Assured ID Root G3                                   DigiCert Assured ID Root G3                                   Thu Aug 01 08:00:00 EDT 2013  Fri Jan 15 07:00:00 EST 2038  EC             384       SHA384WITHECDSA      102             true   true       
     utnuserfirstclientauthemailca    UTN-USERFirst-Client Authentication and Email                 UTN-USERFirst-Client Authentication and Email                 Fri Jul 09 13:28:50 EDT 1999  Tue Jul 09 13:36:58 EDT 2019  RSA            2048      SHA1WITHRSA          256             true   true       
     digicertassuredidg2              DigiCert Assured ID Root G2                                   DigiCert Assured ID Root G2                                   Thu Aug 01 08:00:00 EDT 2013  Fri Jan 15 07:00:00 EST 2038  RSA            2048      SHA256WITHRSA        256             true   true       
     identrustpublicca                IdenTrust Public Sector Root CA 1                             IdenTrust Public Sector Root CA 1                             Thu Jan 16 12:53:32 EST 2014  Mon Jan 16 12:53:32 EST 2034  RSA            4096      SHA256WITHRSA        512             true   true       
    
       ...

    Verified that all installed system CA certs are "valid = true"

    Select top CA certificate in list ("digicertassuredidrootca"), select "View":

    Dialog created:

    "Certificate Info"

    "digicertassuredidrootca" "Information for certificate DigiCert Assured ID Root CA" ...

    Hit "OK" to close dialog.

    Select top CA certificate in list ("digicertassuredidrootca"), select "Export":

    Dialog created:

    "Certificate Export"

    "[X] Export the public certificate"

    "Properties" ...

    Hit "OK". In next dialog, select appropriate location for export to local PC (I used certManagement directory in Niagara User Home).

    Export "digicertassuredidrootca.pem" file by hitting "Save" button in dialog.

    Dialog created:

    "Certificate Export"

    "The certificate and related data was successfully exported." -> "OK".

    Returned to "System Trust Store", certificate was exported without error.

    Select "Import".

    Dialog created:

    "Certificate Import"

    File Chooser, et. al.

    Select "digicertassuredidrootca.pem" file previously exported -> "Open"

    Dialog created:

    "Certificate Import"

    "Information for imported certificate DigiCert Assured ID Root CA"

    ...

    Hit "OK".

    Returned to "System Trust Store", no errors encounted as expected.

    (Omitting "Delete" since I don't want to change system settings).

    2c) "User Trust Store"

    The "User Trust Store" is currently empty (as expected).

    Select "Import" from bottom of pane.

    Dialog created:

    "Certificate Import"

    File Chooser, et. al.

    Select "digicertassuredidrootca.pem" file previously exported in "certManagement" -> "Open"

    Dialog created:

    "Certificate Import"

    "Information for imported certificate DigiCert Assured ID Root CA"

    ...

    Hit "OK".

    Returned to "User Trust Trust" view, verify that the table now contains the imported certificate.

     Alias                    Issued By                    Subject                      Not Before                    Not After                     Key Algorithm  Key Size  Signature Algorithm  Signature Size  Valid  Self Signed
     -----------------------  ---------------------------  ---------------------------  ----------------------------  ----------------------------  -------------  --------  -------------------  --------------  -----  -----------
     digicertassuredidrootca  DigiCert Assured ID Root CA  DigiCert Assured ID Root CA  Thu Nov 09 19:00:00 EST 2006  Sun Nov 09 19:00:00 EST 2031  RSA            2048      SHA1WITHRSA          256             true   true       

    Select the "digicertassuredidrootca" certificate in the table.

    Hit the "View" button, following dialog is created:

    "Certificate Info"

    "digicertassuredidrootca" "Information for certificate DigiCert Assured ID Root CA" ...

    Hit "OK".

    Select the "digicertassuredidrootca" certificate in the "User Trust Store" table.

    Hit the "Delete" button.

    Dialog is created:

    "Delete Certificate(s)"

    "Are you sure you want to delete the selected certificates(s)?" -> "Yes".

    Verified that the certificate is now been removed from the table.

    2d) "Allowed Hosts"

    Select the "Allowed Hosts" tab.

    This table is empty, no hosts to validate at this time.

    "Certificate Management" view appears to be functioning as expected.

  3. "Distribution File Installer" view.

    Select the "Distribution File Installer" view under the "Platform" node in the nav tree.

    3a) "Cleaning"

    Select the "Cleaning" button at the bottom of the pane.

    This takes you to view:

    /C:/Niagara/Niagara-4.2.36.34/cleanDist
    
    5 distribution files were found in directory "/C:/Niagara/Niagara-4.2.36.34/cleanDist".

    The 5 items in the list are:

    File                                            Version            Status                     Description                                                      
    ----------------------------------------------  -----------------  -------------------------  -----------------------------------------------------------------
    qnx-jace-n4-javelina_booke-etfs2048-clean.dist  Tridium 4.0.22.16  Different target platform  WARNING: restores unit to empty N4.0 state - removes station data
    qnx-jace-n4-npm3xx-etfs2048-clean.dist          Tridium 4.0.22.16  Different target platform  WARNING: restores unit to empty N4.0 state - removes station data
    qnx-jace-n4-npm6e-etfs2048-clean.dist           Tridium 4.0.22.16  Different target platform  WARNING: restores unit to empty N4.0 state - removes station data
    qnx-jace-n4-npm6xx-etfs2048-clean.dist          Tridium 4.0.22.16  Different target platform  WARNING: restores unit to empty N4.0 state - removes station data
    qnx-jace-n4-titan-am335x-clean.dist             Tridium 4.1.27.20  Different target platform  WARNING: restores unit to empty N4.1 state - removes station data

    All items are "disabled" state since none of their dependencies can by met by the current platform (as expected).

    NOTE: If you ever created a clean distribution, you would include it in this directory.

    3b) "Conversion"

    Select the "Conversion" button at the bottom of the pane.

    This takes you to view:

    /C:/Niagara/Niagara-4.2.36.34/conversion

    10 distribution files were found in directory "/C:/Niagara/Niagara-4.2.36.34/conversion".

    The 10 items are:

    File Version Status Description


    AXtoN4-qnx-jace-javelina_booke-etfs2048.dist Tridium 4.0.22.16 Different target platform Converts AX unit to N4 - removes all station and configuration data AXtoN4-qnx-jace-npm3xx-etfs2048.dist Tridium 4.0.22.16 Different target platform Converts AX unit to N4 - removes all station and configuration data AXtoN4-qnx-jace-npm6e-etfs2048.dist Tridium 4.0.22.16 Different target platform Converts AX unit to N4 - removes all station and configuration data AXtoN4-qnx-jace-npm6xx-etfs2048.dist Tridium 4.0.22.16 Different target platform Converts AX unit to N4 - removes all station and configuration data AXtoN4-qnx-jace-titan-am335x.dist Tridium 4.1.27.20 Different target platform Converts AX unit to N4 - removes all station and configuration data N4toAX-qnx-jace-javelina_booke-etfs2048-clean.dist Tridium 3.8.38 Different target platform Converts N4 JACE to AX N4toAX-qnx-jace-npm3xx-etfs2048-clean.dist Tridium 3.8.38 Different target platform Converts N4 JACE to AX N4toAX-qnx-jace-npm6e-etfs2048-clean.dist Tridium 3.8.38 Different target platform Converts N4 JACE to AX N4toAX-qnx-jace-npm6xx-etfs2048-clean.dist Tridium 3.8.38 Different target platform Converts N4 JACE to AX N4toAX-qnx-jace-titan-am335x-clean.dist Tridium 3.8.111 Different target platform Converts N4 JACE to AX

    All items are "disabled" state since none of their dependencies can by met by the current platform (as expected).

    3c) "Backups"

    Functionality already tested by "Platform Administration" view "Backup" exercise, see above.

    "Distribution File Installer" appears to functioning as expected.

  4. "File Transfer Client"

    Select the "File Transfer Client" view under the "Platform" node in the nav tree.

    This activates view:

     "File Transfer Client"
    
     "Files on this computer                         Files on '172.16.10.121'"
     "/C:/Users/mike/Niagara4.2/tridium              ~"
     ...

    Create a new file in "/C:/Users/mike/Niagara4.2/tridium" called foo.txt with some random text in it.

    Refresh the "File Transfer Client" view so that the newly created "foo.txt" shows up in the left (local) pane.

    Select the local "foo.txt" file.

    Select the right facing arrow to transfer the item to the remote (right) pane.

    Dialog created:

    "Transfer Status"

    "Transfer complete" -> "OK"

    Verify that the file "foo.txt" has been created on the remote platform and that it size and CRC match the local copy.

    Select the remote (right pane) copy of the "foo.txt" file.

    Select the left facing arrow to transfer the item to the local (left) pane.

    Dialog created:

    "Replace File?"

    "Replace existing file 'foo.txt.'" ....

    Select "Yes".

    Dialog created:

    "Transfer Status"

    "Transfer complete" -> "OK".

    Verify that local "foo.txt" has been overwritten by remote copy, size and CRC should remain unchanged.

    Select the remote (right pane) copy of the "foo.txt" file.

    Select the "X" button to delete the remote copy of the file.

    Dialog created:

    "Confirm Delete"

    "Delete the selected file(s)?" -> "Yes".

    Confirm that the "foo.txt" file has now be deleted on the remote (right) pane.

    Right-click in the remote (right) pane at an empty location.

    In the menu, select "Create subdirectory".

    Dialog created:

    "Create Subdirectory"
    
    "Please entry the name of the new subdirectory"

    Type "foo" and select "OK".

    Verify that the new "foo" directory has been created.

    Select the "foo" directory in the remote (right) pane.

    Select the "X" button to initiate a delete operation of the folder.

    Dialog created:

     "Confirm Delete"
    
     "Delete the selected file(s)?" -> "Yes".

    Confirm that the folder "foo" has now been deleted in the remote (right) pane.

    "File Transfer Client" functionality appears to be correct.

  5. "Lexicon Installer"

    NOTICE: This is a legacy installer not typically used in N4 as lexicon sets have been replaced with lexicon modules. Testing for completeness.

    Select the "Lexicon Installer" view under the "Platform" node in the nav tree.

    This activates the view:

    "Lexicon Installer"

    "Lexicon Sets installed on '172.16.10.121'"

    Create a new directory on your Desktop called "foo".

    In this directory, create a new file "foo.lexicon".

    Hit the "Install" button at the bottom of the pane.

    This creates dialog:

    "Select Directories"

    "Please choose one or more lexicon directories to install to '172.16.10.121'"

    Navigate to and select the "foo" directory you created in the prior step. The "OK" button should activate when the folder is highlighted.

    Hit "OK".

    Dialog created:

    "Installation complete"

    "Transfer Complete" -> "OK".

    Verify that the lexicon table now contains a single entry "foo".

    Highlight the "foo" listing and select "Delete"

    Dialog created:

    "Delete foo?"

    "Do you really want to delete foo?" -> "Yes".

    Verify that foo listing is now gone.

    When "lexicon" directory already exists beneath NIAGARA_HOME, "Lexicon Installer" appears to be functioning normally.

  6. "License Manager"

    Select the "License Manager" view under the "Platform" node in the nav tree.

    This activates view:

    "License Manager"

    "Host Address 172.16.10.121" "Host ID TRID-EVAL-1000-1234-1234" "Brand ID Tridium" "Licenses Certificates" "Tridium.license (....) Tridium.certificate (....)"

    Select the "Tridium.license" in the "Licenses" pane.

    Hit the "View" button.

    Dialog created:

    Tridium.license

    ...

    Verify that license matches expectations.

    Hit "Ok" to close dialog.

    Select the "Tridium.license" in the "Licenses" pane.

    Hit the "Export" button.

    Dialog created:

     "Save License As..."
    
     "Choose a name for the new local copy of the selected license file"
    
     File Chooser, et. al.

    Select a location to save the "licenses.lar" file, I choose my "Desktop". Hit "Ok" to export the license.

    Dialog created:

     "File saved"
    
     "licenses.lar saved" -> "OK" to continue.

    Verify that the file "licenses.lar" has been saved to the location of your choosing.

    Select the "Tridium.license" file in the "Licenses" pane.

    Hit the "Delete" button.

    NOTICE: Best to do this while a Station is not running as it will affect feature behavior.

    Dialog created:

     "Delete selected file(s)?"
    
     "Do you really want to delete the selected file(s)?" -> "Yes".

    Verify that the "Tridium.license" has now been removed from the "Licenses" pane.

    Hit the "Import" button.

    Dialog created:

    "Import License"

    "[X] Import one or more licenses from files" " Import licenses from the local license database" " Import licenses from the licensing server"

    Leave the default action selected and select "OK".

    In the "Select File" dialog that is created, navigate to the "licenses.lar" location that you previously created through the "Export" exercise. The "OK" button should activate once you've selected the "licenses.lar" file.

    Hit "OK".

    Dialog created:

    "Licensing Complete"

    "The licenses and certificates for the remote host have been successfully updated." "Added" " Tridium.license (....)" -> "OK".

    Verify that the "Licenses" pane now contains the previously exported and deleted license.

    NOTICE: You could have also selected the "Import licenses from the licensing server" if you had an internet connection.

    Select the "Tridium.certificate" in the "Certificates" pane.

    Hit the "View" button under the "Certificates" pane.

    Dialog created:

     <certificate version="1.0" vendor="Tridium" generated="2006-10-13" expiration="never">
      <publicKey algorthm="DSA">
     MIIBuDCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZ
     pRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1
     fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCo
     uuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCB
     gLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqh
     RkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYUAAoGBAOgedPntvEcmwNPRGTIGYRSe8ngIbS
     JmXKT21Xe3+TuIOGX5vbJftTdPZv3RrvtDPkhaa3qcev1MHl1/sWkfdSZO8pTO+U0MrOMHFm8eV
     /HRIOVhHeuu4/LDyJ8sNXoE1xwmjWwuo/9AenXFAbB/2i5tOPIhUKP+t7cnxiNRn+P/
      </publicKey>
      <signature>MCwCFEBPY5+ZDMau5y4H5VCUe89YcSV6AhRt+HZb5fyDStHkSF1UXpbP2xdJmQ==</signature>
     </certificate>

    Verify that certificate matches expectations.

    Hit "Ok" to close dialog.

    Select the "Tridium.certificate" in the "Certificates" pane.

    NOTICE: Backup the existing "Tridium.certificate" to a local location if you do not already have one available in your local PC workbench!!! There is no "Export" function!!!

    Hit the "Delete" button under the "Certificates" pane.

    Dialog created:

    "Delete selected file(s)?"
    
    "Do you really want to delete the selected file(s)?" -> "Yes".

    Verify that the "Tridium.certificate" item has been removed from the "Certificates" pane.

    Hit the "Import" button under the "Certificates" pane.

    Dialog created:

    "Select File"

    "Please choose one or more certificate files to install to '172.16.10.121'"

    This dialog should be pointed automatically to your local installation "certificates" directory. Select the appropriate certificate ("Tridium.certificate" in this case) to install and select "OK".

    Dialog created:

    "Licensing Complete"

    "The licenses and certificates for the remote host have been successfully updated."

    "Added" " Tridium.certificate (...)".

    Hit "OK" to continue.

    Verify that the "Certificates" pane now has the "Tridium.certificate" installed.

    Navigate back to the "Application Director" and restart any stopped Station ("npsdkTest") to verify that both the License and Certificate files are valid and have been correctly installed.

    Station started normally.

    The "License Manager" view appears to be functioning as expected.

  7. "Platform Administration"

    NOTICE: Platform Administration view test coverage already provided above. See sections on all the buttons available to the Platform Administation view above.

  8. "Software Manager"

    Select the "Software Manager" view under the "Platform" node in the nav tree.

    This activates the view:

    "Current free space XXXX KB To be installed 0 KB   Estimated free space after install XXX KB".
    ...

    Filter the column by "Installed Version" so that all currently installed items are sorted to the top (Version in this case is "4.2.36.38").

    Select all items installed.

    Select the "Re-install" option.

    Status of items should change to "Re-install Tridium ..."

    Hit the "Commit" button.

    Dialog created (Note station was running when this action was taken):

    "Stop Applications?"
    
    "All running applications must be stopped before proceeding with the installation. Click 'OK' to stop them now, or 'Cancel' to cancel the installation.
    "The applications will be restarted when installation is complete."

    Hit "OK" to proceed with installation exercise.

    Process should complete without error, ends on the dialog:

    "Open the Application Director now?"
    
    "'npsdk' restarting. Do you want to open Application Director now?"
    
    "[ ] Don't ask again".

    Hit "Yes" to navigate to the Application Director.

    Verify that the Station restarts without error. Since we've reinstalled software, you should expect to see:

    ...

    INFO [13:41:07 06-Sep-17 EDT][sys.registry] Out-of-date: Module changed "alarm-rt" INFO [13:41:07 06-Sep-17 EDT][sys.registry] Rebuilding registry... INFO [13:41:27 06-Sep-17 EDT][sys.registry] Loaded [531ms] INFO [13:41:27 06-Sep-17 EDT][sys.registry] Rebuilt: 2584 types [20271ms] INFO [13:41:33 06-Sep-17 EDT][sys] Registry has changed. Checking modules for additional permissions. INFO [13:41:33 06-Sep-17 EDT][sys] No additional permissions found. INFO [13:41:41 06-Sep-17 EDT][sys] Niagara runtime booted ("/opt/niagara") on TRID-EVAL-1000-1234-1234 (92123ms) INFO [13:41:41 06-Sep-17 EDT][sys] Loading "/home/niagara/stations/npsdk/config.bog"... INFO [13:42:03 06-Sep-17 EDT][sys] Loaded (22740ms) INFO [13:42:09 06-Sep-17 EDT][alarm.database] Loading...

    ...

    in the output. The Station appears to start normally and is now in the "Running" state.

    Navigate back to the "Software Manager" view. Verified that all items installed read "Up to Date". (This was a re-install so this status is not any different from what it was before).

    The "Software Manager" view appears to functioning as expected.

  9. "Station Copier"

    Select the "Station Copier" view under the "Platform" node in the nav tree.

    This activates the view:

    "Stations on this computer Stations on '172.16.10.121" "/C:/Users/mike/Niagara4.2/tridium/stations ~stations" ".... npsdk"

    NOTICE: The Station "npsdk" is currently in a running state from our previous test. Specific details of following tests may vary depending on whether or not your station is running or stopped.

    Select the "npsdk" Station from the right (remote) pane.

    Hit the "< Copy" button to copy this station from the right (remote) pane to the left (local) pane. (You may already have a copy locally).

    Dialog created:

    "Station Transfer Wizard"
    
    "Transferring station 'npsdk'"
    "What name would you like the new station to have?"
    
    "Station name    npsdk"

    Keep the default station name [npsdk] and select "Next"

    The following step appears:

    "Which station files are to be copied?"

    " [ ] Copy files from selected directories" " [ ] Copy every file in the station directory and its subdirectories" " [X] Copy only the "config.bog" station database file"

    Leave the default option selected ("Copy only...") and select "Next"

    The following step appears:

    "How do you want to deal with any existing files?"

    " [ ] Delete the existing 'npsdk' directory before copying" " [X] Overwrite existing station files with new files, while leaving other files intact".

    Leave the default option selected ("Overwrite...") and select "Next"

    The following step appears:

    "Please review your changes"

    "Only the 'config.bog' file will be copied from '192.168.1.124' to the local computer" "Please select the 'Finish' button to start the transfer.'

    Select the "Finish" button.

    The following output should occur on successful transfer:

     Saving station "npsdk"...done
     ~stations/npsdk/config.bog
     Transfer complete.

    Hit "Close" to complete Wizard.

    Verify that the left (local) pane now contains a copy of the "npsdk" Station installed on the remote machine if it did not have it before (it did).

    Select the "npsdk" station in the right (remote) pane.

    Hit the "X Delete" button.

    Dialog is created:

    "Delete Station?"

    "Are you sure you wish to delete station 'npsdk'?" -> "Yes".

    The Station will stop if it was running. Upon completion, verify that no errors occurred and the right (remote) pane is now empty.

    Select the "npsdk" station in the left (local) pane that was copied in the steps above.

    Select the "> Copy" button to copy the station from the left (local) pane to the right (remote) pane.

    Dialog created:

    Dialog created:

    "Station Transfer Wizard"
    
    "Transferring station 'npsdk'"
    "What name would you like the new station to have?"
    
    "Station name    npsdk"

    Keep the default station name [npsdk] and select "Next"

    The following step appears:

    "Station Startup Options"

    " [X] START AFTER INSTALL: Start the station immediately after it is copied" " [X] AUTO-START: Start the station every time the platform daemon starts"

    Leave the default options selected and select "Next"

    The following step appears:

    "How do you want to deal with any existing files?"

    " [ ] Delete the existing 'npsdk' directory before copying" " [X] Overwrite existing station files with new files, while leaving other files intact".

    Leave the default option selected ("Overwrite...") and select "Next"

    The following step appears:

    "Please review your changes"

    "All station files will be copied from the local complete to '172.16.10.121'" "Please select the 'Finish' button to start the transfer.'

    Select the "Finish" button.

    The following output should occur on successful transfer:

     Transferring files...
     Sending ~stations/npsdk/config.bog
     FileStore::commit
     Wrote "/home/niagara/stations/npsdk/config.bog".
     FileStore::commitInstance commit complete
     Station "npsdk" starting.
     Transfer complete.

    Hit "Close" to complete Wizard.

    Dialog is created:

    "Open Application Director?"

    "Open the Application Director now?" " [ ] Don't ask again"

    Hit "Yes" to navigate to the Application Director.

    Verify that this process occurred without error and that Station 'npsdk' starts up normally.

    Navigate back to the "Station Copier" to continue testing.

    Select the "npsdk" station in the right (remote) pane.

    Hit the "Rename" button.

    Dialog created:

    "New Station Name"

    "Please enter the new name for the station"

    Enter "npsdk2" and hit "OK" to continue.

    Dialog created:

    "Stop Station?"

    "The station must be stopped before it can be renamed." "Stop it now?"

    Hit "Yes" to stop the running station and continue.

    Dialog will stop the Station and then restart the station with the new name (Output is captured in dialog, rather than directing user to Application Director) [may want to write this up as bug on our end].

    Dialog will auto close when the startup process is complete.

    Validate that the right (remote) pane now contains an entry for "npsdk2" rather than "npsdk".

    Navigate to the "Application Director" view.

    Verify that the Station name is now "npsdk2" and that the station started normally.

         niagara>Unable to open shared memory: /station_npsdk2 (No such file or directory)
         updateWatchdog: watchdog open failed
         javax.baja.sys.BajaRuntimeException: Failed to update engine watchdog, timeout may occur
          at com.tridium.platform.BSystemPlatformService$EngineMonitor.run(BSystemPlatformService.java:2298)
          at java.lang.Thread.run(Thread.java:745)
    
     This is a bug in our NPSDK reference implementation, *not* a bug in your implementation. We've captured this internally for resolution in a future release. This means that 
     the Station "rename" functionality *must* have a reboot take place prior to the new station starting normally. This *does not* prevent Tridium 
     from accepting your implementation as it is something we must address.    

    Navigate back to the "Station Copier" view.

    Select the "npsdk2" station from the right (remote) pane.

    Hit the "Delete" button.

    Proceed through dialogs to delete the "npsdk2" station.

    Select the "npsdk" station from the left (local) pane.

    Hit the "> Copy" button to copy from left (local) to right (remote).

    Accept all previously copied options to transfer the Station to the remote platform. Finish with:

       Transferring files...
       Sending ~stations/npsdk/config.bog
       FileStore::commit
       Wrote "/niagara/niagara_user_home/stations/npsdk/config.bog".
       FileStore::commitInstance commit complete
       Station "npsdk" starting.
       Transfer complete.

    Navigate back to the "Application Director" view. Verify that the station "npsdk" starts normally.

    The "Station Copier" view appears to be functioning as expected.

  10. "TCP/IP Configuration"

    Select the "TCP/IP Configuration" view under the "Platform" node in the nav tree.

    This activates the view:

    "TCP/IP Configuration"

    "Host name ...." "Hosts file ...."

    Using ssh, the current IP configuration of this platform is reported as:

       root@localhost:/home/niagara# ifconfig
       can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
                 UP RUNNING NOARP  MTU:16  Metric:1
                 RX packets:11417 errors:0 dropped:0 overruns:0 frame:0
                 TX packets:1279 errors:0 dropped:0 overruns:0 carrier:0
                 collisions:0 txqueuelen:10
                 RX bytes:79797 (77.9 KiB)  TX bytes:3837 (3.7 KiB)
                 Interrupt:167
    
       eth0      Link encap:Ethernet  HWaddr 54:4a:16:fb:d0:90
                 inet addr:172.16.10.121  Bcast:172.16.11.255  Mask:255.255.254.0
                 UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                 RX packets:52712 errors:0 dropped:0 overruns:0 frame:0
                 TX packets:21388 errors:0 dropped:0 overruns:0 carrier:0
                 collisions:0 txqueuelen:1000
                 RX bytes:26166356 (24.9 MiB)  TX bytes:8193584 (7.8 MiB)
                 Interrupt:177
    
       eth1      Link encap:Ethernet  HWaddr d8:80:39:3f:c9:78
                 inet addr:192.168.1.126  Bcast:192.168.1.255  Mask:255.255.255.0
                 UP BROADCAST MULTICAST  MTU:1500  Metric:1
                 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                 collisions:0 txqueuelen:1000
                 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
       lo        Link encap:Local Loopback
                 inet addr:127.0.0.1  Mask:255.0.0.0
                 UP LOOPBACK RUNNING  MTU:65536  Metric:1
                 RX packets:1387 errors:0 dropped:0 overruns:0 frame:0
                 TX packets:1387 errors:0 dropped:0 overruns:0 carrier:0
                 collisions:0 txqueuelen:1
                 RX bytes:215673 (210.6 KiB)  TX bytes:215673 (210.6 KiB)
    
       usb0      Link encap:Ethernet  HWaddr 7a:08:14:31:79:6a
                 inet addr:192.168.7.2  Bcast:192.168.7.3  Mask:255.255.255.252
                 UP BROADCAST MULTICAST  MTU:1500  Metric:1
                 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                 collisions:0 txqueuelen:1000
                 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

    The current /etc/hosts values are:

       root@localhost:/home/niagara# cat /etc/hosts
       10.99.0.191     localhost
       127.0.0.1       localhost

    NOTE 11: The /etc/hosts file has an unknown 10.99.0.191 entry in it. This is an invalid map for the localhost value. Is this value in all of your /etc/hosts by default? This will cause resolution errors. You should investigate if this was just leftover from some previous testing.

    The current /etc/resolv.conf values are:

       root@localhost:/home/niagara# cat /etc/resolv.conf
       domain tridium2012.net
       search tridium2012.net
       nameserver 172.31.64.11
       nameserver 172.31.64.12

    The current hostname is:

       root@localhost:/home/niagara# hostname
       localhost

    The "TCP/IP Configuration" currently shows:

    Host Name localhost Hosts File 10.99.0.191 localhost 127.0.0.1 localhost DNS Domain tridium2012.net IPv4 Gateway 172.16.10.1 DNSv4 Servers 172.31.64.11 172.31.64.12

     Interface 1
     ID                  en0
     Description         en0
     Physical Address    54:5A:16:FB:D0:90
     Adapter Enabled     [X] Enabled
    
     IPv4 Settings
    
            DHCPv4                 [ ] Enabled
            IPv4 Address           172.16.10.121
            IPv4 Subnet Mask       255.255.254.0
            DHCPv4 Server          172.31.64.11
            DHCPv4 Lease Granted   2017-10-05 22:02:01
            DHCPv4 Lease Expires   2017-10-06 01:02:01
    
     Interface 2
     ID                  en1
     Description         en1
     Physical Address    D8:80:39:3F:C9:78
     Adapter Enabled     [X] Enabled
    
     IPv4 Settings
    
            DHCPv4                 [ ] Enabled
            IPv4 Address           192.168.1.126
            IPv4 Subnet Mask       255.255.255.0

    Take notice that the second adapter does not support DHCP.

    These settings appear in agreement with what is displayed by the ifconfig/host commands. However, why en0 and not eth0? Is this to stay in agreement with the values that are displayed on a Tridium JACE?

    NOTE 12: The TCP/IP Configuration view shows adapters "en0" and "en1" although the adapters are actually "eth0" and "eth1". The names presented in the view should be in agreement with how the values are displayed by the ifconifg command. This will be confusing since the Java class NetworkInterface will use the "eth0/1" names.

          I will need to see eth0 to both a) update the IoTium image and b) verify the DHCP settings are being correctly represented in the TCP/IP configuration view.

    Settings are readonly since Niagara will not allow SI to configure TCP/IP settings at this time. Save button is disabled as expected.

    Functionality of "TCP/IP Configuration View" appears correct (see NOTE 17 for more details).

    12a) Modifying the "Host Name" from "localhost" to "npsdktest" and hit "Save".

    Met with the following dialog:

    Reboot 172.16.10.121?

    The changes require that the remote computer at 172.16.10.121 be rebooted. Reboot now?

    Selected "yes". The expectation is that the host name is changed to "npsdktest" once we reconnect.

     root@localhost:/home/niagara#
     Broadcast message from root@localhost (Wed Sep  6 14:30:40 2017):
    
     The system is going down for reboot NOW!

    On reboot we now show:

     root@npsdktest:~# hostname
     npsdktest

    And upon reconnectin to the TCP/IP configuration I show that Host Name now reads "npsdktest".

    12b) Modifying the "Hosts File" to remove the 10.99.0.191 and hit "Save", reboot.

    After rebooting we show:

    root@npsdktest:~# cat /etc/hosts 127.0.0.1 localhost

    The hosts file in the TCP/IP Configuration is also updated with the appropriate values.

    Notice: testing DNS/Gateway at this time since DHCP is in use.

    12c) Changing Interface 2 IP address from 192.168.1.126/24 to 192.168.1.64/23, hitting "Save"

    Upon reboot the eth1 adapter now shows:

     eth1      Link encap:Ethernet  HWaddr d8:80:39:3f:c9:78
               inet addr:192.168.1.64  Bcast:192.168.1.255  Mask:255.255.254.0
               UP BROADCAST MULTICAST  MTU:1500  Metric:1
               RX packets:0 errors:0 dropped:0 overruns:0 frame:0
               TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
               collisions:0 txqueuelen:1000
               RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
               
     The TCP/IP Configuration view also appears to have updated properly.
     
     

    12d) Changing Interface 1 from DHCP IP address to static '172.16.10.121' to '255.255.254.0' values.

      Uncheck the 'DHCPv4' checkbox.
      
      Leave the values of the Address/Subnet as is.
      
      Hit "Save".
      
      The platform does appear to reboot.
      
      Although the platform was rebooted, it does not appear that device is continuing to use the 172.16.10.121 address. Will
      need to update to the NDIS adapter to see what address has been assigned to this device instead of 172.16.10.121.
     
      Reconnecting with NDIS oddly enough does show:
      
         eth0      Link encap:Ethernet  HWaddr 54:4a:16:fb:d0:90
                   inet addr:172.16.10.121  Bcast:172.16.11.255  Mask:255.255.254.0
                   UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                   RX packets:140 errors:0 dropped:2 overruns:0 frame:0
                   TX packets:90 errors:0 dropped:0 overruns:0 carrier:0
                   collisions:0 txqueuelen:1000
                   RX bytes:9898 (9.6 KiB)  TX bytes:6207 (6.0 KiB)
                   Interrupt:177
                   
      Will have to retry to see if this can be reproduced.
      
      

    12e) Changing Interface 1 from static IP address to DHCP values.

      Re-check the 'DHCPv4' checkbox.
      
      Hit "Save".
               
      The platform does appear to reboot.
      
      Re-connectint to TCP/IP configuration now shows:
      
                 Interface 1
                 ID                  en0
                 Description         en0
                 Physical Address    54:5A:16:FB:D0:90
                 Adapter Enabled     [X] Enabled
         
                 IPv4 Settings
         
                        DHCPv4                 [ ] Enabled
                        IPv4 Address           172.16.10.121
                        IPv4 Subnet Mask       255.255.254.0
                        DHCPv4 Server          172.31.64.11
                        DHCPv4 Lease Granted   2017-10-06 00:07:06
                        DHCPv4 Lease Expires   2017-10-06 03:07:06
                        

    12f) Retesting 12d (DHCP -> Static)

      Uncheck the 'DHCPv4' checkbox.
      
      Leave the values of the Address/Subnet as is.
      
      Hit "Save".
      
      The platform does appear to reboot.    
      
      Did not experience an error this time--the values are correctly shown as:
      
                 Interface 1
                 ID                  en0
                 Description         en0
                 Physical Address    54:5A:16:FB:D0:90
                 Adapter Enabled     [X] Enabled
         
                 IPv4 Settings
         
                        DHCPv4                 [ ] Enabled
                        IPv4 Address           172.16.10.121
                        IPv4 Subnet Mask       255.255.254.0
                        DHCPv4 Server          n/a
                        DHCPv4 Lease Granted   n/a
                        DHCPv4 Lease Expires   n/a
                        

    12g) Modify "DNS domain" (now that we are using static) from "tridium2012.net" to "foo.net"

      Hit "Save", reboot as normal.
    
          root@npsdktest:~# cat /etc/resolv.conf
           domain foo.net
          nameserver 127.0.0.1
          nameserver 172.31.64.11
          nameserver 172.31.64.12
      
      NOTE 13: Setting the "TCP/IP Configuration"  DNS domain when using a static address does not appear to apply correctly. 
      When setting the domain to "foo.net", the /etc/resolv.conf file appeared to have several items that were not expected:
      
      1) " domain foo.net" has a space in the value before domain. It may not cause a problem but it is an odd behavior
      2) "search foo.net" was not added to /etc/resolv.conf (it *is* when using DHCP)
      3) "nameserver 127.0.0.1" -- it is not clear why, or from where, the /etc/resolv.conf contains an entry for 127.0.0.1
      
      Now setting DNS domain back to "tridium2012.net"
      
      A similiar behavior is observed:
      
          root@npsdktest:~# cat /etc/resolv.conf
           domain tridium2012.net
          nameserver 127.0.0.1
          nameserver 172.31.64.11
          nameserver 172.31.64.12
          

    12h) Modify "DNSv4 Servers" from "172.31.64.12,172.31.64.11" to "172.31.64.11,172.31.64.12" (Just swap them) and hit "Save" The expectation is that /etc/resolv.conf will be updated to contain these values in a reversed order.

      After a reboot:
      
         root@npsdktest:~# cat /etc/resolv.conf
          domain tridium2012.net
         nameserver 127.0.0.1
         nameserver 172.31.64.12
         nameserver 172.31.64.11
    
       So it appears that the DNS servers are correctly updated.
       

    Re-setting TCP/IP configuration to use DHCP to confirm that /etc/resolv.conf, IP address return to previous values.

    Verify that /etc/resolv.conf now contains:

     root@npsdktest:~# cat /etc/resolv.conf
     domain tridium2012.net
     search tridium2012.net
     nameserver 172.31.64.11
     nameserver 172.31.64.12

    Aside from the problems with DNS domain when using static IP, "TCP/IP Configuration" appears to be generally functional.

Moving on to Niagara Station functionality.

Will now validate Station npsdk functionality.

Connect to running Station "npsdk" with foxs, port 4911 - (1911 not running for this station).

Dialog created:

"Identity Verifiction"

"Niagara4" "Unable to verify host identiy" ...

This dialog is created because the foxs server is using previously generated self-signed certificate "tridium". Self-signed certificates must be explicitly accepted since mutual trust of signer can not be obtain.

Hit "Accept" to complete connection.

Enter credentials "admin/Niagara123".

Connection to Station successful.

Double-click on Station (npsdk)

View the following Summary Properties:

  Property         Value                        
  ---------------  -----------------------------
  Station Name     npsdk                        
  Host             192.168.40.201/192.168.40.201
  Host Model       CI534                        
  Product          CI534                        
  Host Id          Flex-O748-Q9MB-9W6V-Q6ZB     
  Niagara Version  4.2.36.38                    
  Java Version     OpenJDK Client VM 25.131-b57 
  OS Version       arm Linux 4.4.27-ti-rt-r62   
  Locale           en_US                        
  Current Time     26-Sep-17 1:34 PM EDT        
  

Notice that the 'Host' is using the IP address:

192.168.40.201/192.168.40.201

This is the address of the secondary adapter, not the primary adapter. This will lead to problems as the Niagara Station will report its IP as "192.168.40.201" to anyone who sends traffic to it on "172.16.10.117".

To correct this, you will need to specify the following property in BOTH NreLauncherLinux.cpp and JavaLauncherLinux.cpp:

  //NPSDK Devlopers: If you have more than one ethernet adapter present on your platform
  //you can set a preferred adapter to influence the definition of the NreLib::getLocalHost()
  //method by setting the following system property. If this adapter is enabled and has
  //an internet address assigned to it, the Niagara Runtime Environment will use this
  //address as its definition of the localhost. This address will be used to identify this
  //platform when connecting to the platform, station or the Niagara Network.
  //char preferredNetworkAdapter[64] = { 0 };
  //sprintf(preferredNetworkAdapter, "-Dniagara.preferred.network.adapter=eth0");
  //javaOptions[javaOptionCount++].optionString = preferredNetworkAdapter;
  

Right-click the Station nav node and select "Spy". From the menu in the right view pane, select "systemProperites"

The station defines the following system properties:

Station system properties:

  awt.toolkit sun.awt.X11.XToolkit
  bajaui.hasKeyboard  true
  file.encoding ANSI_X3.4-1968
  file.encoding.pkg sun.io
  file.separator  /
  hx.poll.freq  5000
  ie.activex.activation true
  java.awt.graphicsenv  sun.awt.X11GraphicsEnvironment
  java.awt.headless true
  java.awt.printerjob sun.print.PSPrinterJob
  java.class.path /usr/share/niagara/bin/ext/bcpkix-jdk15on-155.jar:/usr/share/niagara/bin/ext/bcprov-jdk15on-155.jar:/usr/share/niagara/bin/ext/encoder-1.1.1.jar:/usr/share/niagara/bin/ext/javax.servlet-api-3.1.0.jar:/usr/share/niagara/bin/ext/jetty-all-compact3-9.3.14.v20161028.jar:/usr/share/niagara/bin/ext/jettyWrapper.jar:/usr/share/niagara/bin/ext/jxbrowser/runtime.jar:/usr/share/niagara/bin/ext/niagarad.jar:/usr/share/niagara/bin/ext/nre.jar:/usr/share/niagara/bin/ext/org.json-chargebee-1.0.jar:/usr/share/niagara/bin/ext/tridium-JavaMail-1.5.2.1.jar:/usr/share/niagara/bin/ext/tridium-activation-1.0.jar
  java.class.version  52.0
  java.endorsed.dirs  /usr/share/ezre-1.8.0_144/lib/endorsed
  java.ext.dirs /usr/share/ezre-1.8.0_144/lib/ext:/usr/java/packages/lib/ext
  java.home /usr/share/ezre-1.8.0_144
  java.io.tmpdir  /tmp
  java.library.path /usr/share/niagara/bin:
  java.protocol.handler.pkgs  com.tridium.nre.protocol
  java.runtime.name OpenJDK Runtime Environment
  java.runtime.version  1.8.0_144-b72
  java.security.egd file:/dev/./urandom
  java.security.manager 
  java.security.properties  =/usr/share/niagara/security/policy/java.security
  java.specification.name Java Platform API Specification
  java.specification.vendor Oracle Corporation
  java.specification.version  1.8
  java.util.concurrent.ForkJoinPool.common.threadFactory  java.util.concurrent.ForkJoinPool$DefaultForkJoinWorkerThreadFactory
  java.util.logging.SimpleFormatter.format  %4$s [%1$tH:%1$tM:%1$tS %1$td-%1$tb-%1$ty %1$tZ][%3$s] %5$s%6$s%n
  java.vendor Azul Systems, Inc.
  java.vendor.url http://www.azulsystems.com/
  java.vendor.url.bug http://www.azulsystems.com/support/
  java.version  1.8.0_144
  java.vm.info  mixed mode, Evaluation
  java.vm.name  OpenJDK Client VM
  java.vm.specification.name  Java Virtual Machine Specification
  java.vm.specification.vendor  Oracle Corporation
  java.vm.specification.version 1.8
  java.vm.vendor  Azul Systems, Inc.
  java.vm.version 25.144-b72
  jdk.tls.rejectClientInitiatedRenegotiation  true
  line.separator  
  networkaddress.cache.ttl  3600
  niagara.fox.broker.unsubscribeDelay 5000
  niagara.fox.exceptionTranslator com.tridium.fox.sys.LocalizableExceptionTranslator
  niagara.fox.transport.ip  fox:com.tridium.fox.sys.BFoxAddress$IpTransportHandler
  niagara.home  /usr/share/niagara
  niagara.ipv6Enabled false
  niagara.platform.provider com.tridium.nre.platform.NativePlatformProviderNpsdk
  niagara.required.runtime.profiles rt
  niagara.steadystate 10000
  niagara.supported.runtime.profiles  rt,ux,wb,doc
  niagara.ui.px.maxImageModuleFileSize  2047
  niagara.ui.pxCache.max  10
  niagara.ui.volatileBackBuffer false
  niagara.user.home /home/niagara
  org.eclipse.jetty.io.ManagedSelector$SelectorProducer.ExecutionStrategy org.eclipse.jetty.util.thread.strategy.ProduceExecuteConsume
  os.arch arm
  os.name Linux
  os.version  4.1.15-2.0.1+ge65eeec
  path.separator  :
  protected.station.home  /home/niagara/stations/npsdk
  sun.arch.abi  gnueabihf
  sun.arch.data.model 32
  sun.boot.class.path /usr/share/ezre-1.8.0_144/lib/resources.jar:/usr/share/ezre-1.8.0_144/lib/rt.jar:/usr/share/ezre-1.8.0_144/lib/sunrsasign.jar:/usr/share/ezre-1.8.0_144/lib/jsse.jar:/usr/share/ezre-1.8.0_144/lib/jce.jar:/usr/share/ezre-1.8.0_144/lib/charsets.jar:/usr/share/ezre-1.8.0_144/lib/jfr.jar:/usr/share/ezre-1.8.0_144/classes
  sun.boot.library.path /usr/share/ezre-1.8.0_144/lib/arm
  sun.cpu.endian  little
  sun.cpu.isalist 
  sun.io.unicode.encoding UnicodeLittle
  sun.java2d.noddraw  true
  sun.jnu.encoding  ANSI_X3.4-1968
  sun.management.compiler HotSpot Client Compiler
  sun.net.inetaddr.ttl  3600
  sun.net.maxDatagramSockets  128
  sun.os.patch.level  unknown
  user.country  US
  user.dir  /home/niagara/stations/npsdk
  user.home /home/niagara
  user.language en
  user.name niagara
  user.timezone America/New_York

Expand "Station (npsdk)" in nav tree.

Expand "Config" Expand "Services"

  1. "System Platform Service Plugin"

    Double click on "Platform Services" view to open "Platform Service Container Plugin"

    The following information is provided at this view:

         Name                                  npsdk2
         Host                                  172.16.10.121 (npsdk)
         Model                                 TRID-EVAL
         Product                               TRID-EVAL
         Host ID                               TRID-EVAL-1000-1234-1234
         Niagara Version                       4.2.36.38
         Java VM Name                          Java HotSpot(TM) Server VM
         Java VM Vendor                        Oracle Corporation
         Java VM Version                       25.101-b13
         OS Name                               Linux
         OS Arch                               arm
         OS Version                            4.4.62-ti-rt-r99
         Platform Daemon Port                  3011
         Platform Daemon TLS Port              5011
         Locale                                en_US
         System Time                           15:34
         Date                                  06-Sep-2017
         Time Zone                             America/New_York (-5/-4)
         Engine Watchdog Policy                Terminate
         Engine Watchdog Timeout               3m
         Enable Station Auto-Save              [X] Enable
         Station Auto-Save Frequency           1h
         Station Auto-Save Versions to Keep    3
         Number of CPUs                        1
         Current CPU Usage                     8%
         Overall CPU Usage                     53%
         Filesystem                            /     ...
    
                                               TOTAL         FREE
         Physical RAM                          499,120 KB    230,140 KB

    All information appears to be correctly presented.

    Open the "Platform -> Application Director" view to verify that no errors were printed when the System Platform Service, and its child services, were polled for the first time.

    No errors are seen.

    Now testing the setting of various items in this view that afford modification.

    1a) "Locale"

    Change the "Locale" item in "Platform Service Container Plugin" to a new value.

    Current value is "en_US", change value to "en_GB".

    Hit "Save".

    Dialog created:

    "Restart Now?"

    "The changes will not take effect until the station is restarted." "Do you wish to restart now?"

    Hit "Yes" to continue.

    Navigate to the "Platform" -> "Application Director" to see the station "npsdk2" restart.

    Verify that the Niagara Station restarts as expected.

    Re-connect to the station (foxs 4911 - admin/Niagara123) and navigate to the "System Platform Service Plugin" view once more.

    Verified that the "Locale" now reads "en_GB".

    1b) "System Time"

    Change the value of the "System Time" from 15:39 to 19:00 (or whatever value you want).

    Hit "Save".

    Hit "Refresh".

    The retains its assigned value.

    Examine "Application Director" for any errors:

     Called what NSupportNpsdk::parsePlatTZ(America/New_York)
     WARNING [19:00:00 06-Sep-17 EDT][sys.engine] System clock modified: 11984572ms
     Called NSupportNpsdk::parsePlatSysTime(1504742400000)

    NOTE 14: Setting System Time through the System Platform Service view is functioning; however, the Application Director contains NsupportNpsdk output (Called what NSupportNpsdk::parsePlatTZ(America/New_York)....) that should be removed from production.

    1c) "Date"

    Change the value of the "Date" field from 06-Sep-2017 to something else (26-Sep-2107).

    Hit "Save".

    Hit "Refresh".

    The retains its assigned value.

    Examine "Application Director" for any errors, same as identifed above.

    1d) "Time Zone"

    Change the value of the "Time Zone" field from America/New_York (+0) to something else ("America/New_York").

    Hit "Save".

    Dialog created:

    "Restart Now?"

    "The changes will not take effect until the station is restarted." "do you wish to restart now?"

    Navigate to the "Platform" -> "Application Director" to see the station "npsdk2" restart.

    Verify that the Niagara Station restarts as expected.

    Re-connect to the station (foxs 4911 - admin/Niagara123) and navigate to the "System Platform Service Plugin" view once more.

    The Time Zone still reads its original value.

    NOTE 15: Setting Time Zone through the System Platform Service view does not appear to be functioning. This behavior is likely the same problem as NOTE 4.

    1e) "Engine Watchdog Policy"

    Change the value of the "Engine Watchdog Policy" from "Terminate" to "Log Only".

    Hit "Save".

    Hit "Refresh".

    Verified that the "Engine Watchdog Policy" is correctly set to "Log Only".

    Examine "Application Director" output for any errors. None seen.

    Set "Engine Watchdog Policy" back to "Terminate" -> "Save" -> "Refresh".

    "Engine Watchdog Policy" is functioning as expected.

    1f) "Engine Watchdog Timeout"

    Change the value of the "Engine Watchdog Timeout" from 3m to 5m.

    Hit "Save".

    Hit "Refresh".

    Verified that the "Engine Watchdog Timeout" is correctly set to "5m".

    Examine "Application Director" output for any errors. None seen.

    "Engine Watchdog Timeout" is functioning as expected.

    1g) "Engine Station Auto-Save"

    Change the value from "Engine Station Auto-Save" from [X] to [ ].

    Hit "Save".

    Hit "Refresh".

    Verified that the "Engine Station Auto-Save" is correctly set to [ ].

    Re-enabled "Engine Station Auto-Save" -> "Save" -> "Refresh".

    Verified that the "Engine Station Auto-Save" is correctly set to [X].

    Examine "Application Director" output for any errors. None seen.

    "Engine Station Auto-Save" is functioning as expected.

    1h) "Engine Station Auto-Save Frequency"

    Change the value from "Engine Station Auto-Save Frequency" from 1h to 24h.

    Hit "Save".

    Hit "Refresh".

    Verified that the "Engine Station Auto-Save Frequency" is correctly set to 24h.

    Examine "Application Director" output for any errors. None seen.

    Set back to 1h -> "Save" -> "Refresh".

    "Engine Station Auto-Save Frequency" is functioning as expected.

    1i) "Station Auto-Save Versions to Keep"

    Change the value from "Station Auto-Save Versions to Keep" from 3 to 1.

    Hit "Save".

    Hit "Refresh".

    Verified that the "Station Auto-Save Versions to Keep" is correctly set to 1.

    Examine "Application Director" output for any errors. None seen.

    Set back to 3 -> "Save" -> "Refresh".

    "Station Auto-Save Versions to Keep" is functioning as expected.

    1j) "Send Thread Dump to Console"

    Right click the "PlatformService" node in the nav tree to bring a context menu. Select "Actions" -> "Send Thread Dump to Console". Verified that Java Thread Dump is printed to "Platform -> Application Director".

    1k) "Request Garbage Collection"

    Right click the "PlatformService" node in the nav tree to bring a context menu. Select "Actions" -> "Request Garbage Collection". Verify no errors occur.

    1l) "Restart Station"

    Right click the "PlatformService" node in the nav tree to bring a context menu. Select "Actions" -> "Restart Station". Verify no errors occur.

    Dialog created:

    "Restart Station"

    "Are you sure you wish to invoke 'Restart Station'?" -> "Yes".

    Verified through the "Platform -> Application Director" that station "npsdk" restarted without error.

  2. "TCP/IP Platform Service Plugin".

    This functionality has already been tested by above section on "TCP/IP Platform Configuration". The same notes apply here as well as both sections use the same code paths in N4.

  3. "License Service Plugin"

    This functionality has already been tested by above section on "License Manager". The same notes apply here as well.

  4. "NTP Platform Service"

    The following information is displayed by this view:

    "Ntp Platform Service Editor Npsdk"
    
    "Settings"
    "Enabled                        false"
    "Sync Local Clock to NTP        true"
    "Use Local Clock as Backup      false"
    "Generate NTP Statistics        true"
    
    "Time Servers"
    "Address Peer Mode Burst Preferred Min. Poll Interval Max. Poll Interval"

    Examine the "Platform -> Application Director" for errors that may have occurred loading this page, none seen.

    The current values in ntp.conf are:

     root@npsdktest:/home/niagara/etc# cat ntp.conf
     #/home/niagara/etc/ntp.conf: Niagara Network Time Protocol Configuration File
     #Use the NtpPlatformService UI to modify this file.
     #Created: 26-Sep-17 6:12 PM EDT
     #
     #Niagara NtpPlatformService variable, do not modify
     #ntpEnabled false
     #syncAtBoot false
    
    
     #gather information about statistics
     statistics clockstats loopstats
     filegen clockstats file clockstats type none nolink enable
     filegen loopstats file loopstats type none nolink enable

    So the values loaded look appropriate.

    4a) "Enabled"

    Toggle the "Enabled" state of NTP from "false" to "true".

    Hit "Save".

    Dialog created:

    "Reboot Now?"

    "For the NTP changes to take effect, the host must be rebooted." "Reboot now?"

    Selected "No" to defer reboot.

    Hit "Refresh".

    Examine "Platform -> Application Director" output for any errors that occurred during save. None seen.

    Check for update value in ntp.conf:

       $ cat ntp.conf
    
       ...
       #ntpEnabled true
       ...

    Save appears successful.

    4b) "Sync Local Clock to NTP"

    Toggle the "Sync Local Clock to NTP" state from "true" to "false".

    Hit "Save".

    Defer reboot for now to more quickly test changes.

    Examine "Platform -> Application Director" output for any errors that occurred during save. None seen.

    Check for update value in ntp.conf:

       $ cat ntp.conf
    
       ...
       #ntp features disabled
       disable ntp
       ...

    Save appears successful.

    4c) "Use Local Clock as Backup"

    Toggle the "Use Local Clock as Backup" state from "false" to "true".

    Hit "Save".

    Defer reboot for now to more quickly test changes.

    Examine "Platform -> Application Director" output for any errors that occurred during save. None seen.

    Check for update value in ntp.conf:

       $ cat ntp.conf
    
       ...
       #local backup clock
       server 127.127.1.0
       fudge 127.127.1.0 stratum 10
       ...

    Save appears successful.

    4d) "Generate NTP Statistics"

    Toggle the "Generate NTP Statistics" state from "true" to "false".

    Hit "Save".

    Defer reboot for now to more quickly test changes.

    Examine "Platform -> Application Director" output for any errors that occurred during save. None seen.

    Check for update value in ntp.conf:

       $ cat ntp.conf
    
       ...
       #ntp features disabled
       disable ntp stats
       ...

    Save appears successful.

    4e) "Server"

    Add a "Time Server" with the following settings:

      time.windows.com   server  false   false   6   10

    Hit "Save".

    Defer reboot for now to more quickly test changes.

    Examine "Platform -> Application Director" output for any errors that occurred during save. None seen.

    Check for update value in ntp.conf:

       $ cat ntp.conf
    
       ...
       #server list
       server time.windows.com
       ...

    Save appears successful.

    4f) Apply settings and reboot.

    Set the following items:

    Enabled:                     true
    Sync Local clock to NTP:     true
    Use Local Clock as Backup:   true
    Generate NTP statistis:      false
    
    time.windows.com   server  false   false   6   10

    Hit "Save".

    Hit "Yes" to reboot the platform now.

    Use ssh to print the current NTP settings:

       root@npsdktest:~# cat /home/niagara/etc/ntp.conf
       #/home/niagara/etc/ntp.conf: Niagara Network Time Protocol Configuration File
       #Use the NtpPlatformService UI to modify this file.
       #Created: 26-Sep-17 6:17 PM EDT
       #
       #Niagara NtpPlatformService variable, do not modify
       #ntpEnabled true
       #syncAtBoot false
    
       #server list
       server time.windows.com
    
       #local backup clock
       server 127.127.1.0
       fudge 127.127.1.0 stratum 10
    
       #ntp features disabled
       disable stats
    
       #gather information about statistics
       statistics clockstats loopstats
       filegen clockstats file clockstats type none nolink enable
       filegen loopstats file loopstats type none nolink enable

    Settings appear to be saved as requested.

    Query the process table looking for NTP

       root@npsdktest:~# ps -ef | grep ntpd | grep -v grep
       ntp        646     1  0 18:21 ?        00:00:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:109

    So it appears the NTP has been successfully launched; however, the absence of the /home/niagara/etc/ntp.conf command line option makes me think ntpd is always running. Will trying disalbing NTPD in the Platform Service and rebooting to see if the ntpd service is no longer running.

    Diabling NTP through the platform service:

       root@npsdktest:~# cat /home/niagara/etc/ntp.conf
       #/home/niagara/etc/ntp.conf: Niagara Network Time Protocol Configuration File
       #Use the NtpPlatformService UI to modify this file.
       #Created: 26-Sep-17 6:28 PM EDT
       #
       #Niagara NtpPlatformService variable, do not modify
       #ntpEnabled false
       #syncAtBoot false

    And manually rebooting device through the Application Director....

    After reboot:

    root@npsdktest:~# ps -ef | grep ntpd | grep -v grep ntp 658 1 0 18:30 ? 00:00:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:109

    This confirms that the NTP Platform Service is not being utilized.

    NOTE 17: The platform is not respecting the contents of the /home/niagara/etc/ntp.conf file. If intending to use Niagara to control NTP, the NTP daemon on this platform should respect the "ntpEnabled" flag of this file and it (ntpd) should use the configuration file generated at /home/niagara/etc/ntp.conf for time servers. If NTP is not meant to be configured by Niagara, please remove the "

    " entry from the default platform.bog file for this platform.

  5. "CertManagerService"

    Functionality already confirmed in testing of "Certificate Manager" under "Platform" node.

  6. "SerialPortPlatformServiceNpsdk"

    Double click on the "Serial Port Platform Service Npsdk" under "Platform Services".

    Examine "Platform -> Application Director" output for any errors. None seen.

    Service "Property Sheet" shows the following information:

    SerialPortPlatformServiceNpsdk (Serial Port Platform Service Npsdk) | - Platform Service Description OS Serial Communications | - COM1 none | | - Owner none | | - OS Port Name /dev/tty04 | | - Port Index 0 | | - COM2 | | - Owner none | | - OS Port Name /dev/tty05 | | - Port Index 1

    All items appear correct.

    Adding a "raw" (modbus) serial driver to see if locking mechanisms behave as expected.

    Open "Software Manager" under "Platform".

    Locate and "Install" the following modules (if not already)

    "basicDriver-rt" "modbusAsync-rtb" "modbusAsync-wb" "modbusCore-rtb" "modbusCore-wb"

    Hit "Commit". Verify that modules are installed without error.

    Back under the station, open "Drivers" in the Station -> Config -> Drivers in the nav tree.

    Click "New".

    Select "Modbus Async Network". (1)

    Hit "OK".

    Use default "New" parameters, Hit "OK".

    Verify that "ModbusAsyncNetwork" is added to "Driver Manager" -- status is likely "No port selected for Modbus communication". If not license, update license to include this feature and re-start station.

    Right-click on "ModbusAsyncNetwork" under "Drivers" in nav tree and select "AX Property Sheet."

    In the property sheet, locate and expand the "Serial Port Config" item (near bottom).

    In the "Port Name" field, enter COM1 (from above).

    Hit "Save".

    Verify "Status" of "ModbusAsyncNetwork" transitions to "{ok}" and no errors occur.

    Re-open the "SerialPortPlatformServiceNpsdk" view -- verify that the owner of COM1 now displays "ModbusAsyncNetwork".

    Go back to "AX Property Sheet" of "ModbusAsyncNetwork".

    Replace "COM1" in "Port Name" with "COM2". Hit "Save".

    Verify "Status" of "ModbusAsyncNetwork" still "{ok}" and no errors occur in Application Director output.

    Re-open the "SerialPortPlatformServiceNpsdk" view -- verify that the owner of COM1 goes back to "none" and that COM2 now displays "ModbusAsyncNetwork".

    Now place "COM5" (or a port that does not exist in SerialPortService) in "Port Name" and hit "Save".

    Verify that the "ModbusAsyncNetwork" has transitioned to "{fault}" with message "Could not enable Modbus serial communication (javax.baja.serial.PortClosedException)"

    Verify that Application Director has numerous errors, starting with "niagara>SEVERE [19:04:17 26-Apr-17 UTC][SerialHelper] 'COM5' not a valid comm port."

    Switch "COM1" back into "Port Name" and "Save".

    Verify status returns to "{ok}".

    6a) "Baud Rate"

    Under "Serial Port Config", change "Baud Rate" for "COM1" from "Baud9600" to "Baud115200". Hit "Save". Verify no errors in "Platform -> Application Director".

    Repeat process for other baud rates, verify no errors.

    6b) "Data Bits"

    Under "Serial Port Config", change "Data Bits" for "COM1" from "Data Bits8" to "Data Bits7". Hit "Save". Verify no errors in "Platform -> Application Director".

    Repeat process for other data bits, verify no errors.

    6c) "Stop Bits"

    Under "Serial Port Config", change "Stop Bits" for "COM1" from "Stop Bits1" to "Stop Bits2". Hit "Save". Verify no errors in "Platform -> Application Director".

    Repeat process for other stop bits, verify no errors.

    6d) "Parity"

    Under "Serial Port Config", change "Parity" for "COM1" from "None" to "Space". Hit "Save". Verify no errors in "Platform -> Application Director".

    Repeat process for other parities, verify no errors.

    6e) "Flow Control Mode"

    Under "Serial Port Config", change Flow Control Mode from:

    [ ] RtsCtsOnInput [ ] RtsCtsOnOutput [ ] XonXoffOnInput [ ] XonXoffOnOutput

    to

    [X] RtsCtsOnInput [ ] RtsCtsOnOutput [ ] XonXoffOnInput [ ] XonXoffOnOutput

    Hit "Save". Verify no errors in "Platform -> Application Director"; however, the Application Director shows

     SEVERE [18:44:42 26-Sep-17 EDT][SerialHelper] Unsupported comm parameter
     java.lang.UnsupportedOperationException: Invalid flow control mode.
      at com.tridium.platSerial.npsdk.BSerialPortNpsdk.setFlowControlMode(BSerialPortNpsdk.java:428)
      at com.tridium.platSerial.BSerialPortHandle.setFlowControlMode(BSerialPortHandle.java:120)
      at javax.baja.serial.BSerialHelper.changed(BSerialHelper.java:436)
      at com.tridium.sys.schema.ComponentSlotMap.fireComponentEvent(ComponentSlotMap.java:1100)
      at com.tridium.sys.schema.ComponentSlotMap.modified(ComponentSlotMap.java:960)
      at com.tridium.sys.schema.ComplexSlotMap.set(ComplexSlotMap.java:1083)
      at com.tridium.sys.schema.ComplexSlotMap.set(ComplexSlotMap.java:879)
      at javax.baja.sys.BComplex.set(BComplex.java:829)
      at javax.baja.sync.SetOp.commit(SetOp.java:108)
      at javax.baja.sync.SyncBuffer.commitOp(SyncBuffer.java:286)
      at javax.baja.sync.SyncBuffer.commit(SyncBuffer.java:233)
      at com.tridium.fox.sys.broker.BBrokerChannel.syncToMaster(BBrokerChannel.java:2269)
      at com.tridium.fox.sys.broker.BBrokerChannel.circuitOpened(BBrokerChannel.java:268)
      at com.tridium.fox.sys.BFoxConnection.circuitOpened(BFoxConnection.java:464)
      at com.tridium.fox.session.SessionCircuits$ServiceThread.run(SessionCircuits.java:316)
      at java.lang.Thread.run(Thread.java:745)
      

    This is a bug in the Niagara Framework that has been resolved in 4.4. It also occurs on Tridium JACEs. Please disregard the error.

    Uncheck all "Flow Control Options" and "Status" will return to "{ok}"

    Repeat steps 6a - 6e for each COMX device to verify correct (or known errata) behavior.

    "Serial Port Platform Service" appears to be functioning as expected.

  7. "BacnetMstpPlatformServiceNpsdk"

    Open "Software Manager" under "Platform".

    Locate and "Install" the following modules (if not already)

     "bacnet-rt"
     "bacnet-wb"
     "bacnet-ux"
     "platBacnet-rt"
     "platMstp-rt"
     

    This will test that the basics of MSTP are functional (lock files and such)

    Make sure your license has "mstp" and "bacnet" if it does not already.

     <feature name="bacnet" expiration="2017-10-20" history.limit="none" point.limit="none" schedule.limit="none" device.limit="none" ports="6" export="true"/>
     <feature name="mstp" expiration="2017-10-20" port.limit="6"/>
     

    Add a new "BacnetNetwork" network to the Niagara Station's driver nav node.

    Add a new "MstpPort" (under Network Ports) to the "Network" under the Bacnet Comm nav node.

    Double click on the MstpPort you just added and view the following properties:

     Network Number -1
     Link                  
        Port Name  COM1
        Baud Rate  Baud_9600
        Mstp Address 0
        Max Master 127
        Max Info Frames 20
        Support Extended Frames false
     Status {ok}
     Fault Cause
     Poll Service
     Max Devices
     Enabled
     Port Id
     Port Info
     

    Change network number to '2' Change Enabled to "true"

    Hit 'Save'

    Verify that no Application Director errors are present.

    At the SSH prompt, verify that the appropriate lock file has been created:

       root@npsdktest:/tmp# ls -asl /tmp
       total 60
       ...
       4 -rw-rw-r--  1 niagara niagarad   12 Sep 26 19:26 niagara-ser0.owner
       

    And that the lock file has the appropriate information:

       root@npsdktest:/tmp# cat niagara-ser0.owner
       station:mstp
       

    Navigate to the Serial Port Platform Service and verify that the owner of the COM1 port has been updated to 'mstp1'

    Toggle the enabled state back to 'false'

    Verify that the lock file is destroyed and the Serial Port Platform Service owner is updated ('none')

Next, move on to a simulation of an "Engine Watchdog Timeout" by purposefully locking up the "Engine" thread.

Connect to "Station (npsdk)" in the nav tree with "admin/Niagara123".

Navigate to "Config" -> "Platform Services".

In the "Platform Service Container Plugin":

Verify that the "Engine Watchdog Policy" is set to "Terminate". Verify that the "Engine Watchdog Timeout" is set to "1m" 1 minute.

In the Workbench "Pallete", locate the "program" module.

Drag an instance of "Program" under the "Config" node in the Station's nav tree.

Right click the "Program" to bring up a menu. Select "Views -> Program Editor".

Select the "Slots" tab.

Right-click on empty area and select "Add Slot"

Name the slot "lockupOnExecute"

Type the slot as "baja" "Boolean"

Select the flag "Execute on Change".

Hit "OK".

Copy the following program code into the "Edit" view:

    public void onStart() throws Exception
    {
      // start up code here

      setLockupOnExecute(false);
    }

    public void onExecute() throws Exception
    {
      // execute code (set executeOnChange flag on inputs)

      if (getLockupOnExecute())
      {
        System.out.println("Putting thread '" + Thread.currentThread().getName() + "' to sleep, expect EWT after ~1 minute");

        long timeout = 60000;
        long sleepTime = 5000;

        while (true)
        {
          try
          {
            Thread.sleep(sleepTime);
            timeout-=sleepTime;

            System.out.println("Engine woke up, expect EWT in ~" + timeout + "ms");
          }
          catch (Exception ignored)
          {}      
        }  
      }
    }

    public void onStop() throws Exception
    {
      // shutdown code here
    }
  

Hit "Save and Compile" (Disk + Hammer Button).

Now, when we want to simulate a EWT:

Double click the "Program" to bring up the "Property Sheet". Set the "lockupOnExecute" boolean from "false" to "true". Hit "Save" The next time the "Program" is executed, an EWT will occur (it is execute on change so it will happen immediately).

Navigate to the "Platform -> Application Director" to watch the output of the robot:

  Putting thread 'Nre:Engine' to sleep, expect EWT after ~1 minute
  Engine woke up, expect EWT in ~55000ms
  Engine woke up, expect EWT in ~50000ms
  Engine woke up, expect EWT in ~45000ms
  Engine woke up, expect EWT in ~40000ms
  Engine woke up, expect EWT in ~35000ms
  Engine woke up, expect EWT in ~30000ms
  Engine woke up, expect EWT in ~25000ms
  Engine woke up, expect EWT in ~20000ms
  Engine woke up, expect EWT in ~15000ms
  Engine woke up, expect EWT in ~10000ms
  Engine woke up, expect EWT in ~5000ms
  Engine woke up, expect EWT in ~0ms
  Engine woke up, expect EWT in ~-5000ms
  Engine woke up, expect EWT in ~-10000ms
  Engine woke up, expect EWT in ~-15000ms
  Engine woke up, expect EWT in ~-20000ms
  Engine woke up, expect EWT in ~-25000ms
  Engine woke up, expect EWT in ~-30000ms
  Engine woke up, expect EWT in ~-35000ms
  ....

Verify that EWT (Engine Watchdog Timeout) occurs after ~1m (sometimes up to 1:30) and the policy "Terminate" is enforced by the Niagara Daemon. The following is seen in the "Platform -> Application Director" view:

    ENGINE WATCHDOG TIMEOUT STACK DUMP @ Tue Sep 26 18:51:53 EDT 20172017-09-26 18:51:53
    Full thread dump Java HotSpot(TM) Server VM (25.101-b13 mixed mode):

    "SerialRcv:ModbusAsyncNetwork" #60 prio=5 os_prio=0 tid=0xa96b4c38 nid=0x4ce runnable [0xa89be000]
       java.lang.Thread.State: RUNNABLE
     at com.tridium.platSerial.npsdk.BSerialPortNpsdk.read0(Native Method)
     at com.tridium.platSerial.npsdk.BSerialPortNpsdk.access$300(BSerialPortNpsdk.java:39)
     at com.tridium.platSerial.npsdk.BSerialPortNpsdk$SerialInputStream.read(BSerialPortNpsdk.java:567)
     at com.tridium.modbusAsync.comm.ModbusAsyncRxDriver.receive(ModbusAsyncRxDriver.java:76)
     at com.tridium.basicdriver.comm.CommReceiver.run(CommReceiver.java:92)
     at java.lang.Thread.run(Thread.java:745)

    "Poll:ModbusAsyncNetwork" #56 prio=5 os_prio=0 tid=0xa96d67d0 nid=0x4c5 waiting on condition [0xa8a0e000]
       java.lang.Thread.State: TIMED_WAITING (sleeping)
     at java.lang.Thread.sleep(Native Method)
     at javax.baja.driver.util.BPollScheduler.run(BPollScheduler.java:721)
     at java.lang.Thread.run(Thread.java:745)
     
     ....
     

The station should "Terminate" (NOTICE: If "Restart on Failure" is selected in "Application Director", the station will auto-restart)

Verified that station "npsdk" terminated and restarted as expected.

Repeat the above steps, instead selecting "Log Only" for "Engine Watchdog Policy" under "Platform Service".

  Putting thread 'Nre:Engine' to sleep, expect EWT after ~1 minute
  Engine woke up, expect EWT in ~55000ms
  Engine woke up, expect EWT in ~50000ms
  Engine woke up, expect EWT in ~45000ms
  Engine woke up, expect EWT in ~40000ms
  Engine woke up, expect EWT in ~35000ms
  ...

Verified that the Niagara Daemon only "Logs" a Watchdog Timeout rather than "Terminating" the station.

  ENGINE WATCHDOG TIMEOUT STACK DUMP @ Tue Sep 26 18:58:47 EDT 20172017-09-26 18:58:47
  Full thread dump Java HotSpot(TM) Server VM (25.101-b13 mixed mode):

  "Fox:Circuit:bd4131e563348203b02de2b52bdc8729d7658c217a703f05e7 (Pooled:1)" #49 prio=5 os_prio=0 tid=0x01222d18 nid=0x53e in Object.wait() [0xa901e000]
     java.lang.Thread.State: WAITING (on object monitor)
   at java.lang.Object.wait(Native Method)
   - waiting on <0xb079f838> (a com.tridium.fox.session.SessionCircuits$ServiceThread)
   at java.lang.Object.wait(Object.java:502)
   at com.tridium.fox.session.SessionCircuits$ServiceThread.run(SessionCircuits.java:308)
   - locked <0xb079f838> (a com.tridium.fox.session.SessionCircuits$ServiceThread)
   at java.lang.Thread.run(Thread.java:745)   
  
  ...
  

See also in "Platform Administration" -> "View Daemon Output":

  WARNING [18:58:47 26-Sep-2017] [tid = 55] engine watchdog: station npsdk2 ENGINE LOCKUP DETECTED
  WARNING [18:58:47 26-Sep-2017] [tid = 55] engine watchdog: station npsdk2 ENGINE WATCHDOG - LOGGING ONLY
  
  

Repeat the above steps, instead selecting "Reboot" for "Engine Watchdog Policy" under "Platform Service".

  Putting thread 'Nre:Engine' to sleep, expect EWT after ~1 minute
  Engine woke up, expect EWT in ~55000ms
  Engine woke up, expect EWT in ~50000ms
  Engine woke up, expect EWT in ~45000ms
  Engine woke up, expect EWT in ~40000ms
  Engine woke up, expect EWT in ~35000ms
  Engine woke up, expect EWT in ~30000ms
  Engine woke up, expect EWT in ~25000ms
  Engine woke up, expect EWT in ~20000ms
  Engine woke up, expect EWT in ~15000ms
  Engine woke up, expect EWT in ~10000ms
  Engine woke up, expect EWT in ~5000ms
  Engine woke up, expect EWT in ~0ms
  Engine woke up, expect EWT in ~-5000ms
  Engine woke up, expect EWT in ~-10000ms

Verified that the EWT occurs but the platform does not reboot (as previously noted for other items)

See also in "Platform Administration" -> "View Daemon Output":

  WARNING [19:07:02 26-Sep-2017] [tid = 68] engine watchdog: station npsdk2 ENGINE WATCHDOG - REBOOTING PLATFORM
  MESSAGE [19:07:02 26-Sep-2017] [tid = 76] app: killing station npsdk2
  MESSAGE [19:07:02 26-Sep-2017] [tid = 76] app: stopping watchdog for station npsdk2
  TRACE   [19:07:02 26-Sep-2017] [tid = 68] niagarad: queueReboot thread started [tid = 77]
  MESSAGE [19:07:02 26-Sep-2017] [tid = 67] app: station npsdk2 exited with status -119
  ERROR   [19:07:02 26-Sep-2017] [tid = 67] app: station npsdk2 failed, rc = -119
  MESSAGE [19:07:05 26-Sep-2017] [tid = 77] niagarad: stopping
  

And ssh output:

  root@npsdktest:~#
  Broadcast message from root@npsdktest (Tue Sep 26 19:07:08 2017):
  
  The system is going down for reboot NOW!

This completes functional testing of the NPSDK port.

Last updated