353
353
func (s *SnapTestSuite) TestAddNewWritePathForSnap(c *C) {
354
// try add path to non existent app
355
err := addNewWritePathForSnap("non-existent-app", "/dev/ttyUSB0")
356
c.Assert(err != nil, Equals, true)
358
354
// try add same path twice
359
355
makeInstalledMockSnap(s.tempdir, "")
360
err = addNewWritePathForSnap("hello-app", "/dev/ttyUSB0")
356
err := addNewWritePathForSnap("hello-app", "/dev/ttyUSB0")
361
357
c.Assert(err, IsNil)
362
358
err = addNewWritePathForSnap("hello-app", "/dev/ttyUSB0")
363
359
c.Assert(err, Equals, ErrHWAccessAlreadyAdded)
365
// check file path has been added right
366
content, err := ioutil.ReadFile(filepath.Join(snapAppArmorDir, "hello-app.json.additional"))
368
c.Assert(string(content), Equals, `{
361
// check .additional file is written right
362
content, err := ioutil.ReadFile(filepath.Join(snapAppArmorDir, "hello-app.json.additional"))
364
c.Assert(string(content), Equals, `{
375
func (s *SnapTestSuite) TestAddNewSymlinkPathForSnap(c *C) {
376
makeInstalledMockSnap(s.tempdir, "")
378
// try add as symlink to an hw device not in write path, yet
379
err := addNewSymlinkPathForSnap("hello-app", "/dev/symtest0", "/dev/ttyUSB0")
380
c.Assert(err, Equals, ErrHWAccessRemoveNotFound)
382
// try add the same symlink twice
383
err = addNewWritePathForSnap("hello-app", "/dev/ttyUSB0")
385
err = addNewSymlinkPathForSnap("hello-app", "/dev/symtest0", "/dev/ttyUSB0")
387
err = addNewSymlinkPathForSnap("hello-app", "/dev/symtest0", "/dev/ttyUSB0")
388
c.Assert(err, Equals, ErrSymlinkToHWAlreadyAdded)
390
// check .additional file is written right
391
content, err := ioutil.ReadFile(filepath.Join(snapAppArmorDir, "hello-app.json.additional"))
393
c.Assert(string(content), Equals, `{
401
"/dev/symtest0": "/dev/ttyUSB0"
406
// try add a second symlink
407
err = AddHWAccess("hello-app", "/dev/ttyUSB1")
410
err = AddSymlinkToHWDevice("hello-app", "/dev/ttyUSB1", "/dev/symtest1")
413
// check .additional file is written right
414
content, err = ioutil.ReadFile(filepath.Join(snapAppArmorDir, "hello-app.json.additional"))
416
c.Assert(string(content), Equals, `{
425
"/dev/symtest0": "/dev/ttyUSB0",
426
"/dev/symtest1": "/dev/ttyUSB1"
430
// try add symlink with the same name of one of snap's write paths
431
err = addNewSymlinkPathForSnap("hello-app", "/dev/ttyUSB1", "/dev/ttyUSB1")
432
c.Assert(err, Equals, ErrSymlinkToHWNameCollision)
435
func (s *SnapTestSuite) TestRemoveSymlinkToHWDevice(c *C) {
436
aaClickHookCmd = "true"
437
makeInstalledMockSnap(s.tempdir, "")
439
// Add access to 2 devices
440
err := AddHWAccess("hello-app", "/dev/ttyUSB0")
442
err = AddHWAccess("hello-app", "/dev/ttyUSB1")
446
err = AddSymlinkToHWDevice("hello-app", "/dev/ttyUSB0", "/dev/symtest0")
449
err = AddSymlinkToHWDevice("hello-app", "/dev/ttyUSB1", "/dev/symtest1")
452
// Remove hw device with symlink: the symlink is expected to be removed too
453
err = RemoveHWAccess("hello-app", "/dev/ttyUSB1")
456
content, err := ioutil.ReadFile(filepath.Join(snapAppArmorDir, "hello-app.json.additional"))
458
c.Assert(string(content), Equals, `{
466
"/dev/symtest0": "/dev/ttyUSB0"
471
// Remove only the symlink
472
err = RemoveHWAccess("hello-app", "/dev/symtest0")
475
// having removed the last symlink, SymlinkPath is expected to be nil
476
appArmorAdditional, err := readHWAccessJSONFile("hello-app")
478
c.Assert(appArmorAdditional.SymlinkPath, IsNil)
480
// expecting write path unchanged
481
content, err = ioutil.ReadFile(filepath.Join(snapAppArmorDir, "hello-app.json.additional"))
483
c.Assert(string(content), Equals, `{
494
func (s *SnapTestSuite) TestRemoveUdevRuleForSnap(c *C) {
495
aaClickHookCmd = "true"
496
makeInstalledMockSnap(s.tempdir, "")
498
// Add access to 3 devices and 2 symlinks
499
err := AddHWAccess("hello-app", "/dev/ttyUSB0")
501
err = AddHWAccess("hello-app", "/dev/ttyUSB1")
503
err = AddHWAccess("hello-app", "/dev/ttyUSB2")
505
err = AddSymlinkToHWDevice("hello-app", "/dev/ttyUSB0", "/dev/symlink0")
507
err = AddSymlinkToHWDevice("hello-app", "/dev/ttyUSB1", "/dev/symlink1")
510
// Remove the device without symlink
511
err = RemoveHWAccess("hello-app", "/dev/ttyUSB2")
513
content, err := ioutil.ReadFile(filepath.Join(snapUdevRulesDir, "70-snappy_hwassign_hello-app.rules"))
515
c.Assert(string(content), Equals, `KERNEL=="ttyUSB0", TAG:="snappy-assign", ENV{SNAPPY_APP}:="hello-app"
516
KERNEL=="ttyUSB1", TAG:="snappy-assign", ENV{SNAPPY_APP}:="hello-app"
517
ACTION=="add", KERNEL=="ttyUSB0", TAG:="snappy-assign", ENV{SNAPPY_APP}:="hello-app", SYMLINK+="symlink0"
518
ACTION=="add", KERNEL=="ttyUSB1", TAG:="snappy-assign", ENV{SNAPPY_APP}:="hello-app", SYMLINK+="symlink1"
520
// Remove a device with a symlink
521
err = RemoveHWAccess("hello-app", "/dev/ttyUSB1")
523
content, err = ioutil.ReadFile(filepath.Join(snapUdevRulesDir, "70-snappy_hwassign_hello-app.rules"))
525
c.Assert(string(content), Equals, `KERNEL=="ttyUSB0", TAG:="snappy-assign", ENV{SNAPPY_APP}:="hello-app"
526
ACTION=="add", KERNEL=="ttyUSB0", TAG:="snappy-assign", ENV{SNAPPY_APP}:="hello-app", SYMLINK+="symlink0"
528
// Remove the symlink
529
err = RemoveHWAccess("hello-app", "/dev/symlink0")
531
content, err = ioutil.ReadFile(filepath.Join(snapUdevRulesDir, "70-snappy_hwassign_hello-app.rules"))
533
c.Assert(string(content), Equals, `KERNEL=="ttyUSB0", TAG:="snappy-assign", ENV{SNAPPY_APP}:="hello-app"